#define ENABLE_ROSACXX_TESTS 1
#if ENABLE_ROSACXX_TESTS

#include <iostream>
#include <gtest/gtest.h>

#include <rosacxx/complex/complex.h>
#include <rosacxx/filters.h>
#include <rosacxx/core/pitch.h>
#include <rosacxx/core/convert.h>
#include <rosacxx/core/spectrum.h>
#include <rosacxx/core/audio.h>
#include <rosacxx/core/constantq.h>
#include <rosacxx/feature/spectral.h>

#include "tests_data.h"

class ROSACXXTest : public testing::Test {
protected:
    virtual void TearDown() override { }
    virtual void SetUp() override { }
};


TEST_F(ROSACXXTest, test_0x00_midi_to_hz) {
    std::vector<double> gt = {
        8.35482560e+00, 8.85162938e+00, 9.37797466e+00, 9.93561805e+00,
        1.05264206e+01, 1.11523542e+01, 1.18155077e+01, 1.25180943e+01,
        1.32624589e+01, 1.40510858e+01, 1.48866068e+01, 1.57718105e+01,
        1.67096512e+01, 1.77032588e+01, 1.87559493e+01, 1.98712361e+01,
        2.10528413e+01, 2.23047084e+01, 2.36310153e+01, 2.50361886e+01,
        2.65249179e+01, 2.81021716e+01, 2.97732137e+01, 3.15436211e+01,
        3.34193024e+01, 3.54065175e+01, 3.75118986e+01, 3.97424722e+01,
        4.21056826e+01, 4.46094167e+01, 4.72620307e+01, 5.00723773e+01,
        5.30498358e+01, 5.62043432e+01, 5.95464273e+01, 6.30872422e+01,
        6.68386048e+01, 7.08130351e+01, 7.50237972e+01, 7.94849444e+01,
        8.42113651e+01, 8.92188335e+01, 9.45240614e+01, 1.00144755e+02,
        1.06099672e+02, 1.12408686e+02, 1.19092855e+02, 1.26174484e+02,
        1.33677210e+02, 1.41626070e+02, 1.50047594e+02, 1.58969889e+02,
        1.68422730e+02, 1.78437667e+02, 1.89048123e+02, 2.00289509e+02,
        2.12199343e+02, 2.24817373e+02, 2.38185709e+02, 2.52348969e+02,
        2.67354419e+02, 2.83252140e+02, 3.00095189e+02, 3.17939778e+02,
        3.36845461e+02, 3.56875334e+02, 3.78096246e+02, 4.00579018e+02,
        4.24398686e+02, 4.49634745e+02, 4.76371419e+02, 5.04697937e+02,
        5.34708838e+02, 5.66504281e+02, 6.00190378e+02, 6.35879555e+02,
        6.73690921e+02, 7.13750668e+02, 7.56192491e+02, 8.01158037e+02,
        8.48797373e+02, 8.99269491e+02, 9.52742837e+02, 1.00939587e+03,
        1.06941768e+03, 1.13300856e+03, 1.20038076e+03, 1.27175911e+03,
        1.34738184e+03, 1.42750134e+03, 1.51238498e+03, 1.60231607e+03,
        1.69759475e+03, 1.79853898e+03, 1.90548567e+03, 2.01879175e+03,
        2.13883535e+03, 2.26601712e+03, 2.40076151e+03, 2.54351822e+03,
        2.69476368e+03, 2.85500267e+03, 3.02476996e+03, 3.20463215e+03,
        3.39518949e+03, 3.59707796e+03, 3.81097135e+03, 4.03758350e+03,
        4.27767071e+03, 4.53203424e+03, 4.80152302e+03, 5.08703644e+03,
        5.38952737e+03, 5.71000534e+03, 6.04953993e+03, 6.40926429e+03,
        6.79037898e+03, 7.19415593e+03, 7.62194270e+03, 8.07516700e+03,
        8.55534141e+03, 9.06406849e+03, 9.60304605e+03, 1.01740729e+04,
        1.07790547e+04, 1.14200107e+04, 1.20990799e+04, 1.28185286e+04
    };
    auto midi = rosacxx::core::midi_to_hz(nc::arange(128).astype<float>() + 0.375f);
    for (auto i = 0; i < midi.elemCount(); i++) {
        EXPECT_LE(std::abs((midi.getitem(i)-gt[i])/gt[i]), 1e-6);
    }
}

TEST_F(ROSACXXTest, test_0x01_pitch_tuning) {
    const std::vector<float> vec_resolution = { 1e-2, 1e-3 };
    const std::vector<float> vec_tuning = { -0.5, -0.375, -0.25, 0.0, 0.25, 0.375 };
    const std::vector<int  > vec_bins_per_octave = { 12, };
    for (auto resolution : vec_resolution) {
        for (auto tuning : vec_tuning) {
            for (auto bins_per_octave : vec_bins_per_octave) {
                auto hz = rosacxx::core::midi_to_hz(nc::arange(128).astype<float>()+tuning);
                auto est_tuning = rosacxx::core::pitch_tuning(hz, resolution, bins_per_octave);
                EXPECT_LE(std::abs(tuning - est_tuning), resolution);
            }
        }
    }
}

TEST_F(ROSACXXTest, test_0x02_get_window) {
    using namespace rosacxx::filters;
    if (1) {   // STFTWindowType::Rectangular
        auto w = get_window(STFTWindowType::Rectangular, 64, true);
        for (auto i = 0; i < w.elemCount(); i++) {
            EXPECT_EQ(w.getitem(i), 1);
        }
    }
    if (1) {   // STFTWindowType::Bartlett
        std::vector<float> w_sym0 = {
            0.        , 0.03174603, 0.06349206, 0.0952381 , 0.12698413,
            0.15873016, 0.19047619, 0.22222222, 0.25396825, 0.28571429,
            0.31746032, 0.34920635, 0.38095238, 0.41269841, 0.44444444,
            0.47619048, 0.50793651, 0.53968254, 0.57142857, 0.6031746 ,
            0.63492063, 0.66666667, 0.6984127 , 0.73015873, 0.76190476,
            0.79365079, 0.82539683, 0.85714286, 0.88888889, 0.92063492,
            0.95238095, 0.98412698, 0.98412698, 0.95238095, 0.92063492,
            0.88888889, 0.85714286, 0.82539683, 0.79365079, 0.76190476,
            0.73015873, 0.6984127 , 0.66666667, 0.63492063, 0.6031746 ,
            0.57142857, 0.53968254, 0.50793651, 0.47619048, 0.44444444,
            0.41269841, 0.38095238, 0.34920635, 0.31746032, 0.28571429,
            0.25396825, 0.22222222, 0.19047619, 0.15873016, 0.12698413,
            0.0952381 , 0.06349206, 0.03174603, 0.
        };
        std::vector<float> w_sym1 = {
            0.     , 0.03125, 0.0625 , 0.09375, 0.125  , 0.15625, 0.1875 ,
            0.21875, 0.25   , 0.28125, 0.3125 , 0.34375, 0.375  , 0.40625,
            0.4375 , 0.46875, 0.5    , 0.53125, 0.5625 , 0.59375, 0.625  ,
            0.65625, 0.6875 , 0.71875, 0.75   , 0.78125, 0.8125 , 0.84375,
            0.875  , 0.90625, 0.9375 , 0.96875, 1.     , 0.96875, 0.9375 ,
            0.90625, 0.875  , 0.84375, 0.8125 , 0.78125, 0.75   , 0.71875,
            0.6875 , 0.65625, 0.625  , 0.59375, 0.5625 , 0.53125, 0.5    ,
            0.46875, 0.4375 , 0.40625, 0.375  , 0.34375, 0.3125 , 0.28125,
            0.25   , 0.21875, 0.1875 , 0.15625, 0.125  , 0.09375, 0.0625 ,
            0.03125
        };
        auto w0 = get_window(STFTWindowType::Bartlett, 64, false);
        auto w1 = get_window(STFTWindowType::Bartlett, 64, true);
        for (auto i = 0; i < 64; i++) {
            EXPECT_NEAR(w0.getitem(i), w_sym0[i], 1e-6);
            EXPECT_NEAR(w1.getitem(i), w_sym1[i], 1e-6);
        }
    }
    if (1) {   // STFTWindowType::Hamming
        std::vector<float> w_sym0 = {
            0.08      , 0.08228584, 0.08912066, 0.10043651, 0.11612094,
            0.13601808, 0.15993016, 0.18761956, 0.21881106, 0.25319469,
            0.29042872, 0.3301431 , 0.37194313, 0.41541338, 0.46012184,
            0.50562416, 0.55146812, 0.5971981 , 0.64235963, 0.68650386,
            0.72919207, 0.77      , 0.80852209, 0.84437549, 0.87720386,
            0.90668095, 0.93251381, 0.95444568, 0.97225861, 0.98577555,
            0.99486218, 0.99942818, 0.99942818, 0.99486218, 0.98577555,
            0.97225861, 0.95444568, 0.93251381, 0.90668095, 0.87720386,
            0.84437549, 0.80852209, 0.77      , 0.72919207, 0.68650386,
            0.64235963, 0.5971981 , 0.55146812, 0.50562416, 0.46012184,
            0.41541338, 0.37194313, 0.3301431 , 0.29042872, 0.25319469,
            0.21881106, 0.18761956, 0.15993016, 0.13601808, 0.11612094,
            0.10043651, 0.08912066, 0.08228584, 0.08
        };
        std::vector<float> w_sym1 = {
            0.08      , 0.08221503, 0.08883877, 0.09980745, 0.11501542,
            0.13431622, 0.15752398, 0.18441519, 0.21473088, 0.24817909,
            0.28443769, 0.3231575 , 0.36396562, 0.40646905, 0.45025845,
            0.49491212, 0.54      , 0.58508788, 0.62974155, 0.67353095,
            0.71603438, 0.7568425 , 0.79556231, 0.83182091, 0.86526912,
            0.89558481, 0.92247602, 0.94568378, 0.96498458, 0.98019255,
            0.99116123, 0.99778497, 1.        , 0.99778497, 0.99116123,
            0.98019255, 0.96498458, 0.94568378, 0.92247602, 0.89558481,
            0.86526912, 0.83182091, 0.79556231, 0.7568425 , 0.71603438,
            0.67353095, 0.62974155, 0.58508788, 0.54      , 0.49491212,
            0.45025845, 0.40646905, 0.36396562, 0.3231575 , 0.28443769,
            0.24817909, 0.21473088, 0.18441519, 0.15752398, 0.13431622,
            0.11501542, 0.09980745, 0.08883877, 0.08221503
        };
        auto w0 = get_window(STFTWindowType::Hamming, 64, false);
        auto w1 = get_window(STFTWindowType::Hamming, 64, true);
        for (auto i = 0; i < 64; i++) {
            EXPECT_NEAR(w0.getitem(i), w_sym0[i], 1e-6);
            EXPECT_NEAR(w1.getitem(i), w_sym1[i], 1e-6);
        }
    }
    if (1) {   // STFTWindowType::Hanning
        std::vector<float> w_sym0 = {
            0.        , 0.00248461, 0.00991376, 0.0222136 , 0.03926189,
            0.06088921, 0.08688061, 0.11697778, 0.15088159, 0.1882551 ,
            0.22872687, 0.27189467, 0.31732949, 0.36457977, 0.41317591,
            0.46263495, 0.51246535, 0.56217185, 0.61126047, 0.65924333,
            0.70564355, 0.75      , 0.79187184, 0.83084292, 0.86652594,
            0.89856625, 0.92664544, 0.95048443, 0.96984631, 0.98453864,
            0.99441541, 0.99937846, 0.99937846, 0.99441541, 0.98453864,
            0.96984631, 0.95048443, 0.92664544, 0.89856625, 0.86652594,
            0.83084292, 0.79187184, 0.75      , 0.70564355, 0.65924333,
            0.61126047, 0.56217185, 0.51246535, 0.46263495, 0.41317591,
            0.36457977, 0.31732949, 0.27189467, 0.22872687, 0.1882551 ,
            0.15088159, 0.11697778, 0.08688061, 0.06088921, 0.03926189,
            0.0222136 , 0.00991376, 0.00248461, 0.
        };
        std::vector<float> w_sym1 = {
            0.        , 0.00240764, 0.00960736, 0.02152983, 0.03806023,
            0.05903937, 0.08426519, 0.11349477, 0.14644661, 0.18280336,
            0.22221488, 0.26430163, 0.30865828, 0.35485766, 0.40245484,
            0.45099143, 0.5       , 0.54900857, 0.59754516, 0.64514234,
            0.69134172, 0.73569837, 0.77778512, 0.81719664, 0.85355339,
            0.88650523, 0.91573481, 0.94096063, 0.96193977, 0.97847017,
            0.99039264, 0.99759236, 1.        , 0.99759236, 0.99039264,
            0.97847017, 0.96193977, 0.94096063, 0.91573481, 0.88650523,
            0.85355339, 0.81719664, 0.77778512, 0.73569837, 0.69134172,
            0.64514234, 0.59754516, 0.54900857, 0.5       , 0.45099143,
            0.40245484, 0.35485766, 0.30865828, 0.26430163, 0.22221488,
            0.18280336, 0.14644661, 0.11349477, 0.08426519, 0.05903937,
            0.03806023, 0.02152983, 0.00960736, 0.00240764
        };
        auto w0 = get_window(STFTWindowType::Hanning, 64, false);
        auto w1 = get_window(STFTWindowType::Hanning, 64, true);
        for (auto i = 0; i < 64; i++) {
            EXPECT_NEAR(w0.getitem(i), w_sym0[i], 1e-6);
            EXPECT_NEAR(w1.getitem(i), w_sym1[i], 1e-6);
        }
    }
    if (1) {   // STFTWindowType::Blackman
        std::vector<float> w_sym0 = {
            -1.38777878e-17,  8.98411345e-04,  3.63185303e-03,  8.31269905e-03,
            1.51208395e-02,  2.42929144e-02,  3.61078948e-02,  5.08696327e-02,
            6.88871356e-02,  9.04534244e-02,  1.15823900e-01,  1.45195178e-01,
            1.78685338e-01,  2.16316495e-01,  2.58000502e-01,  3.03528487e-01,
            3.52564792e-01,  4.04645669e-01,  4.59182958e-01,  5.15472725e-01,
            5.72708685e-01,  6.30000000e-01,  6.86392904e-01,  7.40895422e-01,
            7.92504343e-01,  8.40233491e-01,  8.83142293e-01,  9.20363618e-01,
            9.51129866e-01,  9.74796369e-01,  9.90861238e-01,  9.98980923e-01,
            9.98980923e-01,  9.90861238e-01,  9.74796369e-01,  9.51129866e-01,
            9.20363618e-01,  8.83142293e-01,  8.40233491e-01,  7.92504343e-01,
            7.40895422e-01,  6.86392904e-01,  6.30000000e-01,  5.72708685e-01,
            5.15472725e-01,  4.59182958e-01,  4.04645669e-01,  3.52564792e-01,
            3.03528487e-01,  2.58000502e-01,  2.16316495e-01,  1.78685338e-01,
            1.45195178e-01,  1.15823900e-01,  9.04534244e-02,  6.88871356e-02,
            5.08696327e-02,  3.61078948e-02,  2.42929144e-02,  1.51208395e-02,
            8.31269905e-03,  3.63185303e-03,  8.98411345e-04, -1.38777878e-17
        };
        std::vector<float> w_sym1 = {
            -1.38777878e-17,  8.70459096e-04,  3.51772240e-03,  8.04740112e-03,
            1.46287762e-02,  2.34849865e-02,  3.48798684e-02,  4.91019991e-02,
            6.64466094e-02,  8.71961322e-02,  1.11600209e-01,  1.39856013e-01,
            1.72089741e-01,  2.08340092e-01,  2.48544476e-01,  2.92528607e-01,
            3.40000000e-01,  3.90545748e-01,  4.43634798e-01,  4.98624770e-01,
            5.54773174e-01,  6.11252750e-01,  6.67170442e-01,  7.21589416e-01,
            7.73553391e-01,  8.22112452e-01,  8.66349481e-01,  9.05406251e-01,
            9.38508309e-01,  9.64987737e-01,  9.84303003e-01,  9.96055186e-01,
            1.00000000e+00,  9.96055186e-01,  9.84303003e-01,  9.64987737e-01,
            9.38508309e-01,  9.05406251e-01,  8.66349481e-01,  8.22112452e-01,
            7.73553391e-01,  7.21589416e-01,  6.67170442e-01,  6.11252750e-01,
            5.54773174e-01,  4.98624770e-01,  4.43634798e-01,  3.90545748e-01,
            3.40000000e-01,  2.92528607e-01,  2.48544476e-01,  2.08340092e-01,
            1.72089741e-01,  1.39856013e-01,  1.11600209e-01,  8.71961322e-02,
            6.64466094e-02,  4.91019991e-02,  3.48798684e-02,  2.34849865e-02,
            1.46287762e-02,  8.04740112e-03,  3.51772240e-03,  8.70459096e-04
        };
        auto w0 = get_window(STFTWindowType::Blackman, 64, false);
        auto w1 = get_window(STFTWindowType::Blackman, 64, true);
        for (auto i = 0; i < 64; i++) {
            EXPECT_NEAR(w0.getitem(i), w_sym0[i], 1e-6);
            EXPECT_NEAR(w1.getitem(i), w_sym1[i], 1e-6);
        }
    }
    if (1) {   // STFTWindowType::Nuttall
        std::vector<float> w_sym0 = {
            3.62800000e-04, 5.57958854e-04, 1.18467321e-03, 2.36636992e-03,
            4.30764023e-03, 7.29200426e-03, 1.16777507e-02, 1.78909987e-02,
            2.64151172e-02, 3.77757690e-02, 5.25211101e-02, 7.11970651e-02,
            9.43180717e-02, 1.22334207e-01, 1.55596126e-01, 1.94319691e-01,
            2.38552527e-01, 2.88144939e-01, 3.42727620e-01, 4.01698412e-01,
            4.64219997e-01, 5.29229800e-01, 5.95462707e-01, 6.61486347e-01,
            7.25747858e-01, 7.86630229e-01, 8.42515538e-01, 8.91851861e-01,
            9.33220225e-01, 9.65397810e-01, 9.87413759e-01, 9.98594268e-01,
            9.98594268e-01, 9.87413759e-01, 9.65397810e-01, 9.33220225e-01,
            8.91851861e-01, 8.42515538e-01, 7.86630229e-01, 7.25747858e-01,
            6.61486347e-01, 5.95462707e-01, 5.29229800e-01, 4.64219997e-01,
            4.01698412e-01, 3.42727620e-01, 2.88144939e-01, 2.38552527e-01,
            1.94319691e-01, 1.55596126e-01, 1.22334207e-01, 9.43180717e-02,
            7.11970651e-02, 5.25211101e-02, 3.77757690e-02, 2.64151172e-02,
            1.78909987e-02, 1.16777507e-02, 7.29200426e-03, 4.30764023e-03,
            2.36636992e-03, 1.18467321e-03, 5.57958854e-04, 3.62800000e-04
        };
        std::vector<float> w_sym1 = {
            3.62800000e-04, 5.51804472e-04, 1.15753941e-03, 2.29590985e-03,
            4.15908007e-03, 7.01346656e-03, 1.11960149e-02, 1.71079992e-02,
            2.52055665e-02, 3.59863512e-02, 4.99717111e-02, 6.76844669e-02,
            8.96224370e-02, 1.16228516e-01, 1.47858500e-01, 1.84748290e-01,
            2.26982400e-01, 2.74465952e-01, 3.26902335e-01, 3.83778618e-01,
            4.44360497e-01, 5.07698101e-01, 5.72643358e-01, 6.37878968e-01,
            7.01958233e-01, 7.63354282e-01, 8.20516516e-01, 8.71931566e-01,
            9.16185585e-01, 9.52024557e-01, 9.78409225e-01, 9.94561553e-01,
            1.00000000e+00, 9.94561553e-01, 9.78409225e-01, 9.52024557e-01,
            9.16185585e-01, 8.71931566e-01, 8.20516516e-01, 7.63354282e-01,
            7.01958233e-01, 6.37878968e-01, 5.72643358e-01, 5.07698101e-01,
            4.44360497e-01, 3.83778618e-01, 3.26902335e-01, 2.74465952e-01,
            2.26982400e-01, 1.84748290e-01, 1.47858500e-01, 1.16228516e-01,
            8.96224370e-02, 6.76844669e-02, 4.99717111e-02, 3.59863512e-02,
            2.52055665e-02, 1.71079992e-02, 1.11960149e-02, 7.01346656e-03,
            4.15908007e-03, 2.29590985e-03, 1.15753941e-03, 5.51804472e-04
        };
        auto w0 = get_window(STFTWindowType::Nuttall, 64, false);
        auto w1 = get_window(STFTWindowType::Nuttall, 64, true);
        for (auto i = 0; i < 64; i++) {
            EXPECT_NEAR(w0.getitem(i), w_sym0[i], 1e-6);
            EXPECT_NEAR(w1.getitem(i), w_sym1[i], 1e-6);
        }
    }
    if (1) {   // STFTWindowType::BlackmanHarris
        std::vector<float> w_sym0 = {
            6.00000000e-05, 2.04101408e-04, 6.77266237e-04, 1.60200781e-03,
            3.18209500e-03, 5.70127660e-03, 9.52029332e-03, 1.50711734e-02,
            2.28477818e-02, 3.33917235e-02, 4.72729869e-02, 6.50651362e-02,
            8.73153791e-02, 1.14510418e-01, 1.47039558e-01, 1.85157068e-01,
            2.28946182e-01, 2.78287365e-01, 3.32833504e-01, 3.91994497e-01,
            4.54933314e-01, 5.20575000e-01, 5.87629313e-01, 6.54626830e-01,
            7.19967405e-01, 7.81978990e-01, 8.38983999e-01, 8.89369772e-01,
            9.31659269e-01, 9.64577938e-01, 9.87112847e-01, 9.98560509e-01,
            9.98560509e-01, 9.87112847e-01, 9.64577938e-01, 9.31659269e-01,
            8.89369772e-01, 8.38983999e-01, 7.81978990e-01, 7.19967405e-01,
            6.54626830e-01, 5.87629313e-01, 5.20575000e-01, 4.54933314e-01,
            3.91994497e-01, 3.32833504e-01, 2.78287365e-01, 2.28946182e-01,
            1.85157068e-01, 1.47039558e-01, 1.14510418e-01, 8.73153791e-02,
            6.50651362e-02, 4.72729869e-02, 3.33917235e-02, 2.28477818e-02,
            1.50711734e-02, 9.52029332e-03, 5.70127660e-03, 3.18209500e-03,
            1.60200781e-03, 6.77266237e-04, 2.04101408e-04, 6.00000000e-05
        };
        std::vector<float> w_sym1 = {
            6.00000000e-05, 1.99531107e-04, 6.56490713e-04, 1.54591673e-03,
            3.05916663e-03, 5.46278815e-03, 9.09587329e-03, 1.43650003e-02,
            2.17358370e-02, 3.17205829e-02, 4.48606677e-02, 6.17044825e-02,
            8.27803737e-02, 1.08565630e-01, 1.39452707e-01, 1.75714391e-01,
            2.17470000e-01, 2.64654920e-01, 3.16995893e-01, 3.73994316e-01,
            4.34919534e-01, 4.98813592e-01, 5.64508302e-01, 6.30654696e-01,
            6.95764163e-01, 7.58259721e-01, 8.16535157e-01, 8.69019137e-01,
            9.14240925e-01, 9.50894137e-01, 9.77894910e-01, 9.94431158e-01,
            1.00000000e+00, 9.94431158e-01, 9.77894910e-01, 9.50894137e-01,
            9.14240925e-01, 8.69019137e-01, 8.16535157e-01, 7.58259721e-01,
            6.95764163e-01, 6.30654696e-01, 5.64508302e-01, 4.98813592e-01,
            4.34919534e-01, 3.73994316e-01, 3.16995893e-01, 2.64654920e-01,
            2.17470000e-01, 1.75714391e-01, 1.39452707e-01, 1.08565630e-01,
            8.27803737e-02, 6.17044825e-02, 4.48606677e-02, 3.17205829e-02,
            2.17358370e-02, 1.43650003e-02, 9.09587329e-03, 5.46278815e-03,
            3.05916663e-03, 1.54591673e-03, 6.56490713e-04, 1.99531107e-04
        };
        auto w0 = get_window(STFTWindowType::BlackmanHarris, 64, false);
        auto w1 = get_window(STFTWindowType::BlackmanHarris, 64, true);
        for (auto i = 0; i < 64; i++) {
            EXPECT_NEAR(w0.getitem(i), w_sym0[i], 1e-6);
            EXPECT_NEAR(w1.getitem(i), w_sym1[i], 1e-6);
        }
    }
}

TEST_F(ROSACXXTest, test_0x03_stft) {
    int n_fft=256;
    int hop_length=128;
    std::vector<float> vec_y = {-0.0014068223536014557, -0.0004460722266230732, -0.0004109807778149843, 9.992090053856373e-05, 4.315042679081671e-05, -0.00017485348507761955, -0.00036783376708626747, 0.00014553137589246035, 0.0005055782967247069, 0.001492994837462902, 0.0018555219285190105, 0.0009291315800510347, -0.0004074387834407389, -0.00203903391957283, -0.0012686776462942362, -0.0005347277619875968, 0.0008994140662252903, 0.0009759354288689792, 0.0010019976180046797, -0.0012960718013346195, -0.0006973362760618329, -0.0020776470191776752, 0.00016815122216939926, -0.0031369556672871113, 0.01159406453371048, 0.03337440639734268, 0.02283109351992607, 0.010623950511217117, -0.001329911290667951, -0.009193040430545807, -0.019243469461798668, -0.029792027547955513, -0.04080042988061905, -0.04650205746293068, -0.03843670338392258, -0.021050110459327698, -0.0024911672808229923, 0.00935092568397522, 0.014292588457465172, 0.015489764511585236, 0.019572250545024872, 0.028017811477184296, 0.036625221371650696, 0.03935271501541138, 0.0433541014790535, 0.05012625455856323, 0.05469449236989021, 0.04744698107242584, 0.026467904448509216, -0.006240345537662506, -0.0398687943816185, -0.06225116178393364, -0.06726276129484177, -0.056480687111616135, -0.03534869849681854, -0.01170082576572895, 0.007297648582607508, 0.018727723509073257, 0.022423971444368362, 0.020184427499771118, 0.012019908986985683, 0.0029166322201490402, -0.005271380301564932, -0.014409756287932396, -0.02603866346180439, -0.03721465915441513, -0.0429764948785305, -0.039188288152217865, -0.027365241199731827, -0.013183844275772572, -0.00181596539914608, 0.004778219386935234, 0.009855492040514946, 0.01744949072599411, 0.027601804584264755, 0.035798609256744385, 0.03886621072888374, 0.03735964000225067, 0.03502126783132553, 0.03373950347304344, 0.031620558351278305, 0.02614063024520874, 0.014256688766181469, -0.004047009162604809, -0.022266441956162453, -0.032353997230529785, -0.03203771635890007, -0.02219783514738083, -0.007111448794603348, 0.005347900092601776, 0.009880674071609974, 0.0066346232779324055, -0.0004970282316207886, -0.006344420835375786, -0.009686545468866825, -0.012278868816792965, -0.016028553247451782, -0.0222843699157238, -0.03069547563791275, -0.03723090887069702, -0.03714127093553543, -0.02952701598405838, -0.019343767315149307, -0.010854330845177174, -0.004308959469199181, 0.0037673991173505783, 0.01798669993877411, 0.033535294234752655, 0.04388025775551796, 0.045848533511161804, 0.0392153263092041, 0.03013923205435276, 0.02509511634707451, 0.02372949756681919, 0.022049501538276672, 0.017553692683577538, 0.012078279629349709, 0.004535749554634094, -0.003987270873039961, -0.009363023564219475, -0.012147679924964905, -0.011987500824034214, -0.009692380204796791, -0.010687463916838169, -0.013200373388826847, -0.013032263144850731, -0.012485704384744167, -0.011432180181145668, -0.010646897368133068, -0.012932207435369492, -0.020579712465405464, -0.03134956955909729, -0.03886033967137337, -0.04039456695318222, -0.03660256043076515, -0.029507789760828018, -0.023579441010951996, -0.018613280728459358, -0.009752350859344006, 0.00686682341620326, 0.029274210333824158, 0.04751427844166756, 0.054110635071992874, 0.047942787408828735, 0.03554447740316391, 0.026711059734225273, 0.02367260307073593, 0.02416268363595009, 0.02537360228598118, 0.024912800639867783, 0.023875322192907333, 0.025871362537145615, 0.029434887692332268, 0.028033146634697914, 0.02039302885532379, 0.008165058679878712, -0.007304648868739605, -0.021793104708194733, -0.03080257773399353, -0.0339021235704422, -0.03445583954453468, -0.035097815096378326, -0.03617805615067482, -0.03584911674261093, -0.033943984657526016, -0.03358352556824684, -0.036346495151519775, -0.04011525958776474, -0.04204111546278, -0.04074306786060333, -0.035313282161951065, -0.02516181394457817, -0.009281730279326439, 0.008984100073575974, 0.025454290211200714, 0.0394439734518528, 0.04617086052894592, 0.04273972287774086, 0.03482932597398758, 0.027848679572343826, 0.023764166980981827, 0.024484384804964066, 0.02936861291527748, 0.03469174727797508, 0.038923244923353195, 0.04341297969222069, 0.046438101679086685, 0.04571108520030975, 0.04004263877868652, 0.027997596189379692, 0.011825518682599068, -0.00496296351775527, -0.020059894770383835, -0.030646102502942085, -0.03482921048998833, -0.03641200438141823, -0.03821137547492981, -0.037802547216415405, -0.037042226642370224, -0.040509097278118134, -0.044764187186956406, -0.0465412512421608, -0.0472559854388237, -0.04466653987765312, -0.03860020637512207, -0.03263360634446144, -0.02690323069691658, -0.01971283182501793, -0.012620959430932999, -0.0048604258336126804, 0.003738419385626912, 0.01188720390200615, 0.020451372489333153, 0.030747290700674057, 0.04133005067706108, 0.050765473395586014, 0.05699166655540466, 0.056178975850343704, 0.04987478628754616, 0.040889009833335876, 0.03403116762638092, 0.03159957006573677, 0.030909286811947823, 0.02934325486421585, 0.02761862426996231, 0.02458232268691063, 0.021196812391281128, 0.018042724579572678, 0.01483222283422947, -0.0013959951465949416, -0.023120811209082603, -0.030100302770733833, -0.03443191200494766, -0.03924756124615669, -0.04034653306007385, -0.03746388107538223, -0.03995493799448013, -0.045327138155698776, -0.04883623868227005, -0.05065571144223213, -0.0509793683886528, -0.046035733073949814, -0.03842582553625107, -0.0279848650097847, -0.011242146603763103, -0.0051415544003248215, -0.0012773916823789477, 0.004085723776370287, 0.00926685705780983, 0.015837378799915314, 0.024083545431494713, 0.03354068845510483, 0.04067457839846611, 0.04674595594406128, 0.05006221681833267, 0.04940654709935188, 0.0457560196518898, 0.041767898947000504, 0.03919098153710365, 0.03846704959869385, 0.037300631403923035, 0.03528008610010147, 0.03118027001619339, 0.025712594389915466, 0.021324271336197853, 0.01535768061876297, 0.0012020511785522103, -0.020164938643574715, -0.042615342885255814, -0.0601249560713768, -0.06523989140987396, -0.05850270390510559, -0.04848217964172363, -0.04059814289212227, -0.035203758627176285, -0.033469393849372864, -0.034556496888399124, -0.0340707004070282, -0.03345156088471413, -0.03370961174368858, -0.03200259432196617, -0.030991680920124054, -0.031147629022598267, -0.02509692683815956, -0.012720305472612381, 0.0012244898825883865, 0.017322583124041557, 0.03296179324388504, 0.043673545122146606, 0.05071231722831726, 0.05626234784722328, 0.060374028980731964, 0.061879102140665054, 0.05966979265213013, 0.055192045867443085, 0.04867646470665932, 0.043769776821136475, 0.044128142297267914, 0.047975752502679825, 0.05332964286208153, 0.05322148650884628, 0.03501460701227188, -0.0013935620663687587, -0.0392744317650795, -0.06604442745447159, -0.08044910430908203, -0.08339697867631912, -0.07801200449466705, -0.06902045756578445, -0.056440334767103195, -0.04031221568584442, -0.023607777431607246, -0.009458974935114384, -0.0040890490636229515, -0.011293753050267696, -0.02624017745256424, -0.039894916117191315, -0.046495310962200165, -0.0446019321680069, -0.03530823439359665, -0.019828006625175476, -0.0026050880551338196, 0.01194712519645691, 0.02643408812582493, 0.041731853038072586, 0.05760619789361954, 0.07293449342250824, 0.07939381897449493, 0.07255841046571732, 0.059937745332717896, 0.049313776195049286, 0.043859537690877914, 0.046877823770046234, 0.05854570120573044, 0.06908174604177475, 0.07092572748661041, 0.05826810002326965, 0.029167331755161285, -0.011864861473441124, -0.05833500623703003, -0.09870538860559464, -0.12353213131427765, -0.12952397763729095, -0.11781053990125656, -0.09313185513019562, -0.06606137007474899, -0.0399797149002552, -0.01848326064646244, -0.005437223240733147, 0.0028134281747043133, 0.00580983329564333, 0.005395118147134781, 0.003665454685688019, -6.331503391265869e-05, -0.004320122301578522, -0.008666843175888062, -0.012524977326393127, -0.009127907454967499, 0.008290644735097885, 0.03240207955241203, 0.05237623304128647, 0.06299030780792236, 0.06227690726518631, 0.05471426993608475, 0.049715589731931686, 0.05370528623461723, 0.06470836699008942, 0.07992754876613617, 0.0962526947259903, 0.11108598113059998, 0.11972204595804214, 0.10865718871355057, 0.06468989700078964, -0.010849262587726116, -0.09555210918188095, -0.16572126746177673, -0.204950749874115, -0.20627020299434662, -0.18128930032253265, -0.14413627982139587, -0.10391842573881149, -0.06609126925468445, -0.03306754305958748, -0.0037808995693922043, 0.021147556602954865, 0.036657556891441345, 0.04268742352724075, 0.04082801938056946, 0.03312373533844948, 0.02489864081144333, 0.01848144829273224, 0.011077150702476501, 0.006270177662372589, 0.010499510914087296, 0.020692206919193268, 0.031808264553546906, 0.04034963250160217, 0.04427618533372879, 0.0467517152428627, 0.054424822330474854, 0.06844286620616913, 0.08588558435440063, 0.10353067517280579, 0.12335117906332016, 0.15110407769680023, 0.18035699427127838, 0.1825200617313385, 0.1274143010377884, 0.014689086005091667, -0.12180046737194061, -0.23400551080703735, -0.2960878610610962, -0.30686917901039124, -0.2766077518463135, -0.21912892162799835, -0.1512296497821808, -0.08724537491798401, -0.03450748696923256, 0.0038727223873138428, 0.030168628320097923, 0.04752672091126442, 0.060444317758083344, 0.06985829025506973, 0.07415691018104553, 0.07297383248806, 0.06333085894584656, 0.05003081634640694, 0.03702225536108017, 0.025074878707528114, 0.018075544387102127, 0.01428535208106041, 0.015618370845913887, 0.024177096784114838, 0.03753020614385605, 0.05197999253869057, 0.06712615489959717, 0.08289308100938797, 0.10458030551671982, 0.13267280161380768, 0.16308163106441498, 0.19757236540317535, 0.22254344820976257, 0.19030450284481049, 0.07358953356742859, -0.08945047855377197, -0.2487296462059021, -0.36155226826667786, -0.3997308909893036, -0.3699074685573578, -0.2948806583881378, -0.19681625068187714, -0.104521244764328, -0.037019602954387665, 0.006801048293709755, 0.03659011423587799, 0.058408331125974655, 0.07614041864871979, 0.09394621849060059, 0.10623814910650253, 0.10889388620853424, 0.10084006935358047, 0.07919341325759888, 0.05431981757283211, 0.037522319704294205, 0.027486631646752357, 0.021657312288880348, 0.01976192742586136, 0.02046734280884266, 0.022584812715649605, 0.03187425434589386, 0.048160210251808167, 0.0695548728108406, 0.0948593020439148, 0.1203475147485733, 0.14019672572612762, 0.1560186743736267, 0.17949643731117249, 0.19141817092895508, 0.14069664478302002, 0.014065705239772797, -0.14725030958652496, -0.2964656949043274, -0.389629602432251, -0.40035563707351685, -0.342044472694397, -0.24951229989528656, -0.1520925611257553, -0.07078331708908081, -0.014483164995908737, 0.02218332327902317, 0.047621071338653564, 0.06660117954015732, 0.08283667266368866, 0.09694867581129074, 0.10216330736875534, 0.09954482316970825, 0.09156288951635361, 0.07619567960500717, 0.05748068541288376, 0.04184204712510109, 0.03355040401220322, 0.030889680609107018, 0.029599172994494438, 0.030203336849808693, 0.03177696466445923, 0.03803461045026779, 0.05156323313713074, 0.06700876355171204, 0.07955492287874222, 0.0889742523431778, 0.0995139330625534, 0.11195284128189087, 0.13313919305801392, 0.14719849824905396, 0.10942958295345306, 0.008235778659582138, -0.12659868597984314, -0.254869282245636, -0.33510056138038635, -0.3445962369441986, -0.29521527886390686, -0.21606601774692535, -0.13482452929019928, -0.06960994005203247, -0.024336418136954308, 0.00730836670845747, 0.03557458147406578, 0.06174015998840332, 0.08048205822706223, 0.09057596325874329, 0.09366646409034729, 0.09482108056545258, 0.08927062153816223, 0.0737944096326828, 0.052283529192209244, 0.038274798542261124, 0.03800288960337639, 0.04191477969288826, 0.04738563299179077, 0.049174610525369644, 0.04447738826274872, 0.03907915949821472, 0.03667116165161133, 0.037404123693704605, 0.04293988645076752, 0.053365591913461685, 0.07015983760356903, 0.09523802250623703, 0.1279396265745163, 0.13978374004364014, 0.09451998770236969, -0.006230326369404793, -0.13268670439720154, -0.24296680092811584, -0.3036602735519409, -0.3054460287094116, -0.26278573274612427, -0.1963275969028473, -0.12600837647914886, -0.06559799611568451, -0.016364917159080505, 0.025168120861053467, 0.05780204385519028, 0.08181775361299515, 0.09730692207813263, 0.10261006653308868, 0.10138534754514694, 0.09391133487224579, 0.0812135860323906, 0.06495735794305801, 0.04452745243906975, 0.030209172517061234, 0.02521292120218277, 0.024246616289019585, 0.028514383360743523, 0.03297986462712288, 0.03234204649925232, 0.029065217822790146, 0.02734295092523098, 0.028356101363897324, 0.03358234465122223, 0.04638802260160446, 0.07362000644207001, 0.11598476022481918, 0.15154863893985748, 0.13651466369628906, 0.0500800758600235, -0.0833551436662674, -0.21598418056964874, -0.30180659890174866, -0.3207055926322937, -0.28030142188072205, -0.20602759718894958, -0.12330596148967743, -0.05184589698910713, 0.0024600946344435215, 0.041990235447883606, 0.07008791714906693, 0.08918200433254242, 0.09788858145475388, 0.09925957024097443, 0.09736611694097519, 0.09354724735021591, 0.08233185857534409, 0.06179523468017578, 0.03587280586361885, 0.01550816185772419, 0.007870186120271683, 0.008158452808856964, 0.015716176480054855, 0.02164607122540474, 0.021352574229240417, 0.021242542192339897, 0.02372588962316513, 0.03095494583249092, 0.04055992513895035, 0.054846905171871185, 0.08525209128856659, 0.1349332630634308, 0.17532047629356384, 0.1469796895980835, 0.030354559421539307, -0.13001704216003418, -0.2704525887966156, -0.34206676483154297, -0.3319365382194519, -0.260400652885437, -0.16497273743152618, -0.07712336629629135, -0.011708144098520279, 0.029232097789645195, 0.05236589163541794, 0.06944732367992401, 0.08706852793693542, 0.09754069149494171, 0.096845343708992, 0.08912178128957748, 0.07487475872039795, 0.05617770180106163, 0.03399546071887016, 0.021377965807914734, 0.023993948474526405, 0.02924390509724617, 0.030826129019260406, 0.026514187455177307, 0.015791788697242737, 0.005420871078968048, 0.002318866550922394, 0.008646843954920769, 0.025109287351369858, 0.0520012192428112, 0.09103597700595856, 0.14125142991542816, 0.20307081937789917, 0.229076087474823, 0.15167474746704102, -0.019956856966018677, -0.21879589557647705, -0.3713948726654053, -0.4238629639148712, -0.3680734634399414, -0.24297429621219635, -0.11205701529979706, -0.02036176435649395, 0.024492187425494194, 0.038234077394008636, 0.04559215158224106, 0.05913134664297104, 0.0781807154417038, 0.0946720540523529, 0.10546226799488068, 0.10394863039255142, 0.08679071068763733, 0.05838283896446228, 0.030488861724734306, 0.014792046509683132, 0.017219610512256622, 0.03236361965537071, 0.0406595803797245, 0.035577110946178436, 0.017032185569405556, -0.0042541660368442535, -0.014247165992856026, -0.0063460227102041245, 0.01910657063126564, 0.05869069695472717, 0.10494290292263031, 0.161939337849617, 0.24337653815746307, 0.29600030183792114, 0.22066661715507507, 0.014680922031402588, -0.23523205518722534, -0.4346300959587097, -0.5096334218978882, -0.44522392749786377, -0.28916800022125244, -0.12374954670667648, -0.010195167735219002, 0.03793333098292351, 0.038200121372938156, 0.02915928326547146, 0.03878701478242874, 0.06722381711006165, 0.09941745549440384, 0.12094743549823761, 0.12745465338230133, 0.11381369084119797, 0.08417129516601562, 0.050983913242816925, 0.03021516650915146, 0.02183159999549389, 0.021595999598503113, 0.02087421342730522, 0.009698987007141113, -0.0038809534162282944, -0.009729268960654736, -0.005846002139151096, 0.005765731446444988, 0.03077908605337143, 0.06528857350349426, 0.10007761418819427, 0.12836135923862457, 0.16878516972064972, 0.24651320278644562, 0.2833552360534668, 0.172173872590065, -0.05759966000914574, -0.3048069477081299, -0.4766943156719208, -0.5115728974342346, -0.4141440689563751, -0.25148361921310425, -0.09816746413707733, 0.002454613335430622, 0.03837745636701584, 0.030923940241336823, 0.02315332368016243, 0.03964530676603317, 0.07314550131559372, 0.11105514317750931, 0.14054493606090546, 0.14426353573799133, 0.11963841319084167, 0.08217216283082962, 0.05224965885281563, 0.03566357120871544, 0.024556567892432213, 0.01639825664460659, 0.0027124076150357723, -0.012405714951455593, -0.01521933451294899, -0.0032444270327687263, 0.013852527365088463, 0.03169747814536095, 0.05001797154545784, 0.06739602237939835, 0.07868468016386032, 0.08960369229316711, 0.12363915145397186, 0.20666030049324036, 0.2681480646133423, 0.1894986778497696, -0.01716972328722477, -0.2605535686016083, -0.44391852617263794, -0.497549444437027, -0.4166542887687683, -0.2616412937641144, -0.10617705434560776, 0.00010760233999462798, 0.04105251654982567, 0.039718035608530045, 0.03500722721219063, 0.04740802198648453, 0.0716128945350647, 0.10070189088582993, 0.12611651420593262, 0.13285116851329803, 0.11576124280691147, 0.08248406648635864, 0.04956881329417229, 0.026111334562301636, 0.01443873718380928, 0.010885709896683693, 0.007853563874959946, 0.007023447193205357, 0.006941073574125767, 0.008216068148612976, 0.010858931578695774, 0.014558093622326851, 0.022204257547855377, 0.03670912981033325, 0.05455712229013443, 0.0796266719698906, 0.14095129072666168, 0.23378387093544006, 0.2648313641548157, 0.15624701976776123, -0.05912107229232788, -0.29170694947242737, -0.44610992074012756, -0.4633045494556427, -0.36163026094436646, -0.21081198751926422, -0.07626289129257202, 0.010588707402348518, 0.04690994322299957, 0.05488717928528786, 0.06405046582221985, 0.08021804690361023, 0.09261811524629593, 0.09965639561414719, 0.10229533910751343, 0.09486600756645203, 0.07734646648168564, 0.052489958703517914, 0.028684180229902267, 0.012773152440786362, 0.007839933037757874, 0.0106290802359581, 0.009211239404976368, 0.008839895948767662, 0.01191722508519888, 0.01017827820032835, 0.009349551983177662, 0.01643124781548977, 0.03194098919630051, 0.05532427132129669, 0.08624707907438278, 0.13661153614521027, 0.21107324957847595, 0.24522750079631805, 0.16243483126163483, -0.021369455382227898, -0.23017771542072296, -0.3840201199054718, -0.4289357662200928, -0.36128586530685425, -0.2323330044746399, -0.10718747973442078, -0.01631532981991768, 0.0340607687830925, 0.05514167994260788, 0.06857068091630936, 0.08641838282346725, 0.09971685707569122, 0.10016104578971863, 0.09114039689302444, 0.0744144469499588, 0.05553457885980606, 0.038543153554201126, 0.026509879156947136, 0.019281864166259766, 0.01010201871395111, 0.003188975155353546, 0.0002468712627887726, -0.0030174683779478073, 0.0005083158612251282, 0.012157551012933254, 0.02620021253824234, 0.0390666201710701, 0.05372661352157593, 0.07673763483762741, 0.10581677407026291, 0.14919038116931915, 0.2072824239730835, 0.22173571586608887, 0.12686775624752045, -0.058159954845905304, -0.25124865770339966, -0.3807341456413269, -0.4054058790206909, -0.33478236198425293, -0.21714895963668823, -0.10048331320285797, -0.014835906215012074, 0.0315135158598423, 0.050550635904073715, 0.06045863404870033, 0.07100800424814224, 0.08278582990169525, 0.0867357850074768, 0.08282183855772018, 0.07658128440380096, 0.06951700150966644, 0.05991934984922409, 0.04606622830033302, 0.031818218529224396, 0.017879188060760498, 0.004361338913440704, -0.003458969295024872, -0.005383633077144623, -0.0034844279289245605, 0.003658916801214218, 0.013585575856268406, 0.026994163170456886, 0.047346945852041245, 0.07338082790374756, 0.10748519003391266, 0.1654706448316574, 0.24320116639137268, 0.26245707273483276, 0.1520615518093109, -0.05869787558913231, -0.2761608362197876, -0.4135068655014038, -0.42781662940979004, -0.3370453119277954, -0.20744158327579498, -0.0901639312505722, -0.012209353968501091, 0.01638631522655487, 0.020375803112983704, 0.02842438779771328, 0.047421038150787354, 0.0691489428281784, 0.084945447742939, 0.08960103988647461, 0.08591814339160919, 0.08195380866527557, 0.07658098638057709, 0.07171108573675156, 0.057304516434669495, 0.037137046456336975, 0.020842410624027252, 0.0045942217111587524, -0.006855927407741547, -0.009180314838886261, -0.004630684852600098, -0.0038739116862416267, -0.0045129721984267235, 0.006305869203060865, 0.03656712919473648, 0.0802319273352623, 0.13738040626049042, 0.23426130414009094, 0.3217848241329193, 0.2707386314868927, 0.06559279561042786, -0.1918872445821762, -0.3978506624698639, -0.48028022050857544, -0.42002132534980774, -0.27226391434669495, -0.12397995591163635, -0.02253502421081066, 0.016902947798371315, 0.009644731879234314, -0.003633027896285057, 0.00931241363286972, 0.04739725589752197, 0.0845571756362915, 0.10728130489587784, 0.11560563743114471, 0.1063816100358963, 0.08336281776428223, 0.06193206086754799, 0.05103356018662453, 0.039100050926208496, 0.02504781261086464, 0.016459710896015167, 0.0011405888944864273, -0.010896151885390282, -0.006365768611431122, -6.06919638812542e-06, -0.0027231848798692226, -0.008213811554014683, 0.005509030539542437, 0.04224596545100212, 0.0951128751039505, 0.16549140214920044, 0.2740027904510498, 0.34728682041168213, 0.2500289976596832, 0.013120058923959732, -0.24776259064674377, -0.4392651319503784, -0.49773094058036804, -0.4125138223171234, -0.24824340641498566, -0.10044561326503754, -0.010087519884109497, 0.01993710920214653, 0.012190650217235088, 0.0062577491626143456, 0.028918251395225525, 0.07237915694713593, 0.10856851935386658, 0.12629903852939606, 0.12321209907531738, 0.09655318409204483, 0.059145890176296234, 0.03224131464958191, 0.024596355855464935, 0.017473917454481125, 0.007108460180461407, 0.00015069986693561077, -0.009397262707352638, -0.011644581332802773, -0.0036653541028499603, 0.00556532759219408, 0.009159060195088387, 0.013214431703090668, 0.029884524643421173, 0.06371346861124039, 0.10834424197673798, 0.1710115671157837, 0.28029876947402954, 0.341418981552124, 0.22563423216342926, -0.01891881227493286, -0.27547934651374817, -0.4570824205875397, -0.4979320764541626, -0.39580339193344116, -0.2331790030002594, -0.09401627629995346, -0.006506999488919973, 0.028631340712308884, 0.029755011200904846, 0.034267112612724304, 0.059404157102108, 0.09216393530368805};
    auto arr_y = nc::NDArrayF32Ptr::FromVec1D(vec_y);
    auto arr_stft_matrix = rosacxx::core::stft(arr_y, n_fft, hop_length).T();
    // std::cout << arr_stft_matrix << std::endl;
    std::vector<std::vector<double>> vec2d_x = {
        {0.01681092008948326, 0.0, -0.007112395949661732, 0.0, 0.0005031544133089483, 0.0, -0.0012743070255964994, 0.0, -0.002810526406392455, 0.0, 0.00836125761270523, 0.0, -0.003671163460239768, 0.0, 0.0030840912368148565, 0.0, -1.0638015270233154, 0.0},
        {-0.023890838027000427, 1.0083080204115191e-17, 0.0046365163289010525, 0.011498929932713509, 0.00968290027230978, -0.008728683926165104, -0.012031625024974346, -0.003054228378459811, -0.0012758446391671896, 0.0028218128718435764, 0.010283024981617928, -0.003323513548821211, -0.006293610204011202, -0.0005236055003479123, 0.0034053181298077106, 0.003184049855917692, 1.0953632593154907, 0.0276738703250885},
        {0.013394517824053764, 4.40378509055013e-18, 0.01029942836612463, -0.005389055702835321, -0.003287138883024454, 0.014488003216683865, -0.006869459059089422, 0.0005145370378158987, -0.008380945771932602, 0.007996675558388233, 0.011842479929327965, -0.00872192531824112, -0.009994657710194588, 0.0007718700217083097, 0.008532918058335781, 0.004692739807069302, -1.147232174873352, -0.056874800473451614},
        {0.04548719897866249, -5.204170427930421e-17, 0.0030836984515190125, 0.01048264093697071, 0.03972191363573074, -0.01640055701136589, -0.014652024954557419, -0.008857030421495438, -0.004237305838614702, 0.023069730028510094, 0.02634432539343834, -0.004161132499575615, -0.007287160027772188, -0.012200933881103992, 0.0015769925666972995, 0.01355121098458767, 1.3090291023254395, 0.10008682310581207},
        {-0.09760602563619614, 1.5612511283791264e-17, -0.011775760911405087, -0.0011787657858803868, -0.03621853142976761, 0.028784295544028282, -0.06984426826238632, -0.07513254880905151, -0.013795366510748863, 0.024366840720176697, 0.052370429039001465, -0.05593514069914818, -0.03783636912703514, -0.0009914764668792486, 0.038636866956949234, 0.0384376123547554, -1.5120198726654053, -0.1504809409379959},
        {0.030044682323932648, -2.992397996059992e-17, -0.16184256970882416, 0.1739668846130371, -0.08122679591178894, 0.03954322263598442, -0.27858132123947144, -0.04439204931259155, -0.11739909648895264, -0.04566704481840134, 0.21938349306583405, -0.25203514099121094, 0.036509621888399124, -0.13169996440410614, 0.21848227083683014, 0.08261402696371078, 2.460326910018921, 0.3256898522377014},
        {0.4380456805229187, 2.1405130554866396e-18, -0.5911183953285217, -0.3950308561325073, 1.6755801439285278, 0.25415486097335815, -0.2639218866825104, -1.5262726545333862, -0.1760152280330658, 2.6673905849456787, 1.5049288272857666, -0.4764302372932434, -2.473060131072998, -0.31013593077659607, 0.9160295128822327, 1.632354736328125, -4.5991926193237305, -0.713813066482544},
        {-0.2640276551246643, 9.627715291671279e-17, 1.9090709686279297, -0.2823258638381958, -3.3303048610687256, -0.285969614982605, 3.424625873565674, 4.155498504638672, 1.3759093284606934, -6.994844913482666, -5.224414825439453, 2.546210289001465, 6.031371116638184, 1.4707584381103516, -3.25858736038208, -4.561681270599365, 2.498060941696167, 0.34858736395835876},
        {-0.6914922595024109, -6.517979326896864e-18, -1.3806016445159912, 0.7014632821083069, 1.5725477933883667, -0.24200740456581116, -3.934556722640991, -2.603466272354126, -1.5065785646438599, 4.906142711639404, 3.883260726928711, -1.994753360748291, -3.853973627090454, -1.2462302446365356, 2.366414785385132, 3.230419158935547, 2.114438056945801, 0.45248937606811523},
        {0.5941454172134399, -1.474514954580286e-17, 0.16021038591861725, -0.22184106707572937, 0.2516568601131439, 0.18371854722499847, 1.0273692607879639, -0.039303891360759735, 0.3484649360179901, -0.33401212096214294, -0.26992902159690857, 0.15641357004642487, 0.252277135848999, 0.23376984894275665, -0.28809207677841187, -0.34080445766448975, -2.0529515743255615, -0.42732885479927063},
        {0.02981412597000599, -1.002808427390899e-17, 0.03079807758331299, 0.03222121298313141, -0.05934017896652222, 0.04390610009431839, 0.08208496123552322, 0.18107256293296814, 0.07989896833896637, -0.25568392872810364, -0.13413764536380768, -0.03585118055343628, 0.0695037916302681, 0.03599946200847626, 0.0007541372906416655, 0.02812759019434452, 0.5381563901901245, 0.12960584461688995},
        {-0.4111468195915222, 1.3444106938820255e-17, -0.06387531757354736, 0.025656796991825104, -0.008602693676948547, 0.014394935220479965, 0.0005560333956964314, 0.05025447905063629, -0.03911967575550079, -0.03806368261575699, -0.004777972120791674, -0.0774141475558281, 0.09389140456914902, -0.004973818548023701, -0.022505564615130424, 0.0939207598567009, -0.2837832272052765, -0.07717335969209671},
        {0.725176990032196, -4.163336342344337e-17, 0.16002199053764343, 0.023824483156204224, -0.04923716560006142, 0.21085922420024872, -0.07391209155321121, 0.20787754654884338, 0.0900883898139, -0.3312281668186188, 0.19269883632659912, -0.4507424831390381, -0.18247592449188232, 0.3846740424633026, 0.12392153590917587, 0.2420278936624527, -0.568888783454895, -0.19417481124401093},
        {-0.6478446125984192, 2.3852447794681098e-17, -0.02103675901889801, 0.059150733053684235, -0.3478536307811737, -0.2530449628829956, -2.139010190963745, -0.44699588418006897, -2.65818452835083, -0.4241158366203308, 0.8572523593902588, 0.13172398507595062, 3.02182674407959, 0.27216848731040955, -1.0680838823318481, 1.3489214181900024, -0.8376785516738892, -0.3373676836490631},
        {-0.3205486238002777, -2.4732576238243645e-17, 0.3404999375343323, -0.1963893622159958, 0.2509540021419525, -0.4007546603679657, 4.954239845275879, -2.2014758586883545, 7.199769496917725, 3.335310220718384, -3.7008817195892334, 5.312422275543213, -8.640621185302734, -3.074343681335449, 2.509816884994507, -7.608651161193848, 7.695021152496338, 2.8828301429748535},
        {1.3227880001068115, -2.0816681711721685e-17, -0.72038334608078, -0.40826863050460815, 0.3270433843135834, 0.3672567307949066, -2.476046562194824, 4.129383087158203, -5.115089416503906, -3.3020787239074707, 3.4723658561706543, -7.137716293334961, 6.985505104064941, 2.760906219482422, -2.339160680770874, 7.4080376625061035, -9.401981353759766, -3.5442206859588623},
        {-0.514535129070282, 7.28583859910259e-17, 0.22442752122879028, 0.8371767401695251, -0.25772619247436523, 0.02987334318459034, -0.5018730163574219, -1.7609643936157227, -0.16152408719062805, 0.6752055287361145, -0.9177629947662354, 2.1678643226623535, -0.712497889995575, -0.07407519966363907, 0.9073136448860168, -1.1124829053878784, 4.03607702255249, 1.6036063432693481},
        {-0.6150460839271545, 8.326672684688674e-17, 0.10887160152196884, -0.31979650259017944, 0.12379961460828781, 0.08750216662883759, 0.17242327332496643, 0.04822106659412384, 0.6071189641952515, 0.004499527160078287, 0.10788510739803314, 0.10190672427415848, -0.4451751708984375, -0.24328497052192688, -0.1979280412197113, -0.3887178897857666, -1.8520523309707642, -0.8277180194854736},
        {0.4316784143447876, -2.037023413715334e-17, 0.07535924017429352, -0.10018829256296158, 0.0442347414791584, -0.1177719235420227, 0.1359933614730835, 0.07735569775104523, 0.08043534308671951, 0.02864941954612732, -0.02400035783648491, -0.04198078811168671, -0.03410746529698372, -0.06402202695608139, -0.05214618891477585, -0.032640378922224045, 1.9257175922393799, 0.9066882133483887},
        {0.03090727888047695, 8.239936510889834e-18, -0.04416828602552414, -0.06053370609879494, -0.10364393889904022, 0.13272792100906372, 0.11589045077562332, 0.08871862292289734, -0.013008377514779568, 0.1380830556154251, 0.07020116597414017, -0.10600218176841736, 0.07047051191329956, -0.007315433584153652, -0.2734295129776001, 0.08021090924739838, -2.435455083847046, -1.2467455863952637},
        {-0.1405055671930313, 3.122502256758253e-17, 0.07620616257190704, 0.13829326629638672, -0.4839523732662201, -0.04743780195713043, -0.4280712604522705, 0.13191485404968262, 0.9657940864562988, -0.8185847401618958, 0.36450308561325073, 0.8423161506652832, -1.2038893699645996, -1.226984977722168, 0.4513222575187683, -0.906089186668396, 4.495482444763184, 2.4481019973754883},
        {-0.18085309863090515, 1.0842021724855044e-17, -0.41082385182380676, 0.12302542477846146, 0.6558437943458557, -0.385743647813797, -0.8870547413825989, -1.8104441165924072, -3.4593863487243652, 1.8184046745300293, -2.0570743083953857, 1.7817133665084839, 2.996983766555786, 5.034000873565674, 3.715026617050171, 1.6679937839508057, -2.927661418914795, -1.5618113279342651},
        {0.45198604464530945, -2.7268470459592362e-17, 0.5117897987365723, -0.22078722715377808, 0.18554021418094635, 0.4904758036136627, 2.5191309452056885, 1.946435809135437, 3.14009165763855, -1.3015588521957397, 2.336512327194214, -5.219973564147949, -2.576667547225952, -4.82625150680542, -6.351867198944092, -1.6424795389175415, -2.556412696838379, -1.6155518293380737},
        {0.006755093578249216, -2.42861286636753e-17, -0.05826566740870476, 0.15757055580615997, -0.3169873058795929, -0.06758363544940948, -1.5096689462661743, -0.3426451086997986, -0.1926315426826477, -0.15868106484413147, -0.6835699081420898, 3.3687374591827393, 0.49140411615371704, 0.1303512156009674, 2.474898338317871, 1.0177077054977417, 3.4267914295196533, 2.114611864089966},
        {-0.5955686569213867, -2.386521450025524e-17, -0.3060970604419708, -0.26192614436149597, -0.026189744472503662, -0.1246834248304367, 0.1861346811056137, -0.11189281940460205, -0.33554649353027344, 0.31532952189445496, -0.08790616691112518, -0.5996723175048828, 0.04723300784826279, 0.8120797276496887, 0.027397366240620613, -0.30324986577033997, -1.5856878757476807, -1.0531117916107178},
        {0.46338731050491333, -3.382710778154774e-17, 0.08579568564891815, 0.1300954967737198, -0.13884948194026947, 0.0439947135746479, 0.020727936178445816, -0.024994654580950737, -0.02570222318172455, 0.038274165242910385, 0.046941742300987244, 0.045781396329402924, 0.056145720183849335, 0.05963142216205597, 0.007651374209672213, -0.032803867012262344, 1.307163119316101, 0.917940616607666},
        {0.03396576642990112, 1.3688838249211419e-17, 0.09119564294815063, 0.07021661102771759, 0.1693105697631836, 0.13111728429794312, 0.02808305062353611, -0.005287866573780775, -0.13498780131340027, -0.004264285787940025, 0.18243081867694855, -0.0049062869511544704, -0.13418781757354736, -0.11006928235292435, 0.11278170347213745, -0.05878360942006111, -1.1407558917999268, -0.8432902097702026},
        {-0.3058772683143616, 2.5587171270657905e-17, -0.00884714163839817, -0.002106286818161607, -0.06671813130378723, -0.2751545011997223, 0.049305666238069534, 0.39888060092926025, 0.10488080233335495, 0.44573530554771423, -0.2764878571033478, 0.9171721339225769, 0.429002583026886, 1.3542052507400513, 0.5001418590545654, 0.7468463182449341, 2.4668750762939453, 1.9823417663574219},
        {0.3498534858226776, -2.42861286636753e-17, 0.01799825392663479, 0.07231604307889938, 0.1137174442410469, 0.27333930134773254, -1.0688822269439697, -0.37509685754776, 0.6831212043762207, -1.9474828243255615, -1.2638200521469116, -0.16657012701034546, 0.5253688097000122, -4.464436054229736, -1.2466102838516235, 1.45292067527771, -5.06856632232666, -4.210066795349121},
        {-0.09616053849458694, -2.905661822261152e-17, 0.06825166940689087, -0.1592217981815338, -0.15031394362449646, -0.03460526093840599, 1.4781349897384644, -0.5828686356544495, -1.0316848754882812, 2.296027898788452, 2.39543080329895, -2.8285534381866455, -1.1801108121871948, 4.8916802406311035, 0.9823280572891235, -4.807501792907715, 3.6862666606903076, 3.0702521800994873},
        {-0.1807556301355362, -6.517979326896864e-18, -0.17164570093154907, 0.03722049295902252, -0.040741678327322006, -0.08571930229663849, -0.44317373633384705, 0.6411556005477905, 0.23720364272594452, -0.5255041718482971, -1.2419695854187012, 2.8324191570281982, -0.1553996503353119, -1.3107646703720093, -0.39908260107040405, 2.809171438217163, -0.1117907240986824, -0.058446403592824936},
        {0.055715546011924744, 1.973247953923618e-17, 0.05033234879374504, 0.03898555785417557, 0.04934925213456154, -0.009756697341799736, -0.10199940949678421, 0.014414479956030846, 0.06256333738565445, -0.18721595406532288, 0.21222659945487976, -0.8412394523620605, 0.6431134939193726, -0.2462666779756546, 0.051934365183115005, -0.14196297526359558, -0.24792902171611786, -0.20728154480457306},
        {0.11719860881567001, 2.369086633382499e-17, 0.06270045787096024, 0.02200423926115036, -0.0003273698966950178, -0.025600502267479897, 0.059348080307245255, -0.14418955147266388, -0.049573540687561035, -0.12417976558208466, -0.006480139214545488, 0.09625702351331711, -0.11419843137264252, -0.09601745009422302, 0.011461622081696987, 0.04970270395278931, -0.31701821088790894, -0.3142584264278412},
        {-0.05803029611706734, -8.023096076392733e-18, -0.04463539272546768, -0.035857751965522766, 0.07728151232004166, 0.05216990038752556, -0.012124369852244854, -0.006111615803092718, 0.11227235943078995, 0.01662278175354004, 0.037192344665527344, 0.15966548025608063, 0.09696313738822937, 0.19232124090194702, 0.1160576269030571, 0.05276021361351013, 0.4986356198787689, 0.5367422699928284},
        {-0.056853435933589935, -1.2563978495257708e-17, 0.01680172048509121, -0.012550147250294685, -0.02986227162182331, -0.027305608615279198, 0.10197378695011139, 0.13615404069423676, -0.26355448365211487, -0.011660891585052013, -0.14748530089855194, 0.2006356120109558, -0.11025787144899368, -0.8221873044967651, -0.4915236532688141, 0.31136423349380493, -0.976607620716095, -1.090908408164978},
        {0.13435783982276917, 1.691355389077387e-17, -0.008829711936414242, -0.020547285676002502, -0.045658789575099945, 0.06491749733686447, -0.27374589443206787, 0.21638375520706177, 0.4828684628009796, 0.5702178478240967, -0.5644643306732178, -0.130961075425148, -0.9240803122520447, 2.000540256500244, -0.33548805117607117, -0.8773759007453918, 0.04067740961909294, -0.021253393962979317},
        {-0.09457238763570786, 2.42861286636753e-17, -0.02451011724770069, 0.03348537161946297, -0.022595353424549103, -0.13812905550003052, 0.01963162049651146, -0.5462673902511597, -0.487747460603714, -0.9817504286766052, 0.9882922172546387, -1.3150837421417236, 1.920839548110962, -2.436962366104126, 2.4839065074920654, 0.35164105892181396, 1.8904509544372559, 2.3501453399658203},
        {-0.054865121841430664, 5.421010862427522e-17, -0.02027108334004879, 0.05634588003158569, 0.12457703799009323, 0.1232730969786644, 0.246768981218338, 0.21592779457569122, 0.2585116922855377, 0.40190356969833374, -0.30476370453834534, 1.491333246231079, -0.7786540985107422, 1.172094464302063, -2.068894624710083, -0.04411749169230461, -1.7744084596633911, -2.218651294708252},
        {0.0023155228700488806, -1.8242487373650537e-17, 0.15082748234272003, -0.13390539586544037, -0.11649030447006226, 0.029795031994581223, -0.21119670569896698, -0.04700680449604988, 0.006683371029794216, 0.020783374086022377, -0.06085372343659401, -0.3980265259742737, -0.2671085298061371, -0.05136861279606819, 0.323351114988327, 0.21053948998451233, 0.7012284994125366, 0.9333962202072144},
        {0.10744352638721466, -6.678685382510707e-17, -0.20443347096443176, 0.08613253384828568, 0.032756030559539795, -0.12916123867034912, 0.1037309467792511, 0.11612556129693985, -0.03630761802196503, 0.019704757258296013, 0.008743995800614357, 0.05171665549278259, 0.05321505665779114, -0.02016386017203331, 0.012314178980886936, -0.05093681812286377, -0.49478018283843994, -0.7018925547599792},
        {0.017506413161754608, -7.67487487607608e-17, 0.14442940056324005, 0.00036437404924072325, 0.020420268177986145, 0.07261329144239426, 0.02096116542816162, -0.054184023290872574, -0.03006465919315815, 0.023488178849220276, 0.015425577759742737, 0.010902164503932, 0.022805215790867805, -0.0010418000165373087, 0.00021242517686914653, -0.026788080111145973, 0.42740702629089355, 0.6362478733062744},
        {-0.09297922253608704, 8.673617379884035e-18, -0.06725608557462692, 0.012223752215504646, 0.009650345891714096, -0.010229303501546383, 0.006475120782852173, 0.03332085907459259, 0.13125361502170563, -0.010566433891654015, -0.10540446639060974, 0.06353223323822021, -0.13982422649860382, 0.056250959634780884, -0.11134646087884903, -0.05488662049174309, -0.4760807752609253, -0.7613916397094727},
        {0.07882453501224518, -1.0895446011897394e-17, 0.02034417726099491, -0.034942395985126495, -0.041340794414281845, -0.012662021443247795, -0.020657557994127274, 0.08193954825401306, -0.29303550720214844, -0.18708102405071259, -0.060476839542388916, -0.2130511850118637, 0.6962296366691589, -0.07900984585285187, 0.3086089789867401, -0.010870886035263538, 0.6258655190467834, 1.0496971607208252},
        {-0.06869834661483765, -3.5128150388530344e-17, 0.01648499071598053, 0.05124938488006592, 0.04479142650961876, -0.00624594883993268, -0.19145649671554565, -0.1666366308927536, 0.36917033791542053, 0.34820306301116943, 0.4810529947280884, -0.2141319066286087, -1.1209986209869385, -0.09491965919733047, -0.17995409667491913, 0.6823889017105103, -0.3385312259197235, -0.5637272000312805},
        {-0.0075079575181007385, -6.938893903907228e-18, -0.034254468977451324, -0.06752518564462662, 0.007040932308882475, 0.011207287199795246, 0.26493194699287415, 0.04579862952232361, -0.20123110711574554, -0.0995296910405159, -0.4908803105354309, 0.5883282423019409, 0.5691071152687073, -0.008791008964180946, 0.0952533707022667, -0.8326422572135925, -0.09231597185134888, -0.18214987218379974},
        {0.12284474074840546, 1.3010426069826053e-18, 0.06292057037353516, 0.0032339903991669416, -0.05791394039988518, -0.023917673155665398, -0.1616325080394745, 0.024672485888004303, 0.005158265121281147, -0.05796322971582413, 0.17831677198410034, -0.28628256916999817, 0.06956396996974945, 0.18158358335494995, -0.12473221868276596, 0.22558800876140594, 0.08522069454193115, 0.15807434916496277},
        {-0.17008349299430847, -7.385341478475574e-18, -0.08111993223428726, -0.0021104668267071247, 0.05880708619952202, 0.043380264192819595, 0.10061175376176834, -0.010444851592183113, 0.009549717418849468, 0.00814385898411274, -0.0516287200152874, 0.019626978784799576, -0.05175396427512169, -0.07199091464281082, 0.029169118031859398, 0.009306242689490318, -0.015748921781778336, -0.03710813820362091},
        {0.062412332743406296, 5.551115123125783e-17, 0.028411800041794777, 0.045470498502254486, -0.03171447664499283, -0.017992673441767693, -0.031223954632878304, 0.008899482898414135, -0.00624576210975647, -0.04076517000794411, -0.007468400988727808, 0.041452713310718536, -0.039099305868148804, 0.0029151628259569407, -0.0037201400846242905, -0.004456241149455309, 0.03061729669570923, 0.0670817419886589},
        {0.062434177845716476, 4.5102810375396984e-17, 0.006216968409717083, -0.011952881701290607, -0.003658083500340581, 0.022665923461318016, 0.002223421586677432, -0.035153042525053024, 0.006946330424398184, 0.0399467870593071, 0.007333611603826284, -0.08661645650863647, 0.1209569126367569, 0.05230844020843506, 0.05199110135436058, 0.010932812467217445, -0.037809498608112335, -0.09522706270217896},
        {-0.09821727871894836, -1.1796119636642288e-16, 0.003991205245256424, 0.005489205941557884, 0.008326762355864048, -0.03486824408173561, 0.017382511869072914, 0.08526495844125748, 0.0457780621945858, 0.009123280644416809, 0.0592491589486599, 0.016470856964588165, -0.18118678033351898, -0.23954232037067413, -0.11649957299232483, 0.10841162502765656, 0.13110503554344177, 0.35446879267692566},
        {0.0885004773736, -5.506470531105071e-17, 0.002194163855165243, -0.0037766785826534033, 0.0023208276834338903, 0.02346726320683956, -0.09577199071645737, -0.05481408163905144, -0.08305799961090088, -0.11151127517223358, 0.09027611464262009, 0.06782660633325577, 0.10086642950773239, 0.40798893570899963, -0.07464150339365005, -0.2616996765136719, -0.15585575997829437, -0.42547038197517395},
        {-0.05560524761676788, 3.859759734048396e-17, -0.003923914860934019, -0.010894669219851494, -0.013347242958843708, -0.001390452729538083, 0.09934180974960327, -0.023363249376416206, 0.043356627225875854, 0.08856061100959778, -0.22384454309940338, -0.020387694239616394, -0.06045176088809967, -0.27911609411239624, 0.24772605299949646, 0.26743564009666443, 0.03227381035685539, 0.07984177768230438},
        {0.01679777354001999, 6.245004513516506e-17, 0.005683832801878452, 0.00947680976241827, 0.011703205294907093, -0.01636861078441143, -0.031375180929899216, 0.03125292807817459, 0.019316570833325386, 0.00021662659128196537, 0.11483747512102127, 0.01606561988592148, 0.05329861119389534, 0.023204993456602097, -0.08637454360723495, -0.16175884008407593, 0.029668617993593216, 0.09413241595029831},
        {0.024019606411457062, -9.974659986866641e-18, -0.00841369666159153, -0.023931263014674187, -0.009222621098160744, 0.016671329736709595, 0.006461862940341234, -0.014791436493396759, -0.021457845345139503, 0.014223827049136162, -0.027141274884343147, -0.03984938561916351, -0.0006428037886507809, 0.024816876277327538, -0.003826493863016367, 0.052217017859220505, -0.022172508761286736, -0.08293060213327408},
        {-0.043317604809999466, 2.217114860574664e-17, 0.004002806730568409, 0.019601672887802124, 0.008827602490782738, -0.006379546597599983, -0.005310089327394962, 0.00491225253790617, 0.005060164723545313, -0.01409988570958376, -0.0034736832603812218, 0.010009943507611752, -0.002856617793440819, 0.007090933620929718, -0.0004822890623472631, -0.0004739904834423214, 0.026059981435537338, 0.10301956534385681},
        {0.043715376406908035, -2.688821387764051e-17, 0.0003422160807531327, -0.009205610491335392, 0.0008980926359072328, -0.003610648913308978, 0.015641503036022186, -0.010125056840479374, 0.00816697534173727, -0.010061550885438919, 0.03820669278502464, -0.028836259618401527, 0.016584882512688637, -0.04641445726156235, -0.024876056239008904, -0.0029539435636252165, -0.021832318976521492, -0.09765564650297165},
        {-0.04425511509180069, -4.2054279241224654e-17, -0.0029414223972707987, 0.005250121466815472, -0.00781340803951025, 0.012218988500535488, -0.0014407825656235218, 0.03262706473469734, -0.05274942144751549, 0.004967529326677322, 0.018146755173802376, 0.0630929246544838, -0.1400107890367508, 0.08238106220960617, 0.04262467473745346, -0.07611851394176483, 0.04707932099699974, 0.25640973448753357},
        {0.0345664918422699, 1.474514954580286e-17, 0.0006682369275949895, 0.0020937337540090084, 0.006354506127536297, -0.011194632388651371, -0.046937838196754456, 0.002480802359059453, 0.08650694042444229, 0.049201007932424545, -0.046571217477321625, 0.03198365867137909, 0.29687079787254333, -0.023118585348129272, 0.10473434627056122, 0.07988766580820084, -0.07583572715520859, -0.4414069950580597},
        {-0.015352032147347927, -5.609960007440254e-18, -0.007729234639555216, -0.0031970315612852573, -0.005446502473205328, -0.005343503784388304, 0.03242429345846176, -0.052884191274642944, -0.05033988505601883, -0.04382021725177765, -0.08104250580072403, -0.11975746601819992, -0.23916582763195038, -0.013424006290733814, -0.2607938051223755, 0.03997917100787163, 0.04252633824944496, 0.2489420473575592},
        {-0.016575424000620842, -1.0842021724855044e-17, 0.006012673489749432, 0.007742405403405428, 0.015494298189878464, 0.016142144799232483, 0.020917555317282677, 0.03240792825818062, -0.006693052127957344, -0.02524731308221817, 0.10750238597393036, 0.07336042821407318, 0.03478143736720085, -0.018907979130744934, 0.14678837358951569, -0.0366390086710453, -0.0013476689346134663, -0.006966638844460249},
        {0.04773948714137077, -2.42861286636753e-17, -0.0043364884331822395, 0.004341999534517527, -0.025411183014512062, -0.01568037085235119, -0.0216827429831028, -0.006601337343454361, 0.004554548300802708, 0.031172461807727814, -0.036824148148298264, -0.03275349363684654, 0.02419460564851761, 0.010817685164511204, -0.01489332877099514, -0.004808291792869568, 0.001666945405304432, 0.02681403048336506},
        {-0.05399787053465843, -2.5153490401663703e-17, 0.005972190294414759, -0.009091611951589584, 0.010758659802377224, 0.00928516872227192, -0.004924786277115345, 0.006706110667437315, 0.01014072448015213, -0.014134365133941174, 0.022347601130604744, 0.01817885972559452, 0.009453974664211273, 0.003412962192669511, 0.008086874149739742, 0.001898245420306921, -0.004532693885266781, -0.059091173112392426},
        {0.0359397754073143, 7.847699044945764e-18, 0.0024222787469625473, -0.0003679621440824121, 0.015382357873022556, -0.007699604146182537, 0.009338158182799816, 0.0017004588153213263, -0.004250707570463419, 0.007054073736071587, -0.00359281781129539, 0.007761471439152956, -0.0503503791987896, -0.0039614527486264706, 0.008598282001912594, -0.014416346326470375, 0.0028952574357390404, 0.06573685258626938},
        {-0.0052814967930316925, 1.4094628242311558e-18, 0.0007463051006197929, -0.0034763405565172434, -0.023911505937576294, 0.011638322845101357, 0.007043156772851944, -0.0009501826134510338, 0.01372880581766367, 0.005998821463435888, -0.006617648992687464, 0.01854906976222992, 0.0798303559422493, 0.0447855144739151, -0.01533654984086752, 0.0621105320751667, -0.0019486492965370417, 0.009113887324929237},
        {-0.022201215848326683, 6.938893903907228e-18, -0.0025551961734890938, -0.006193749140948057, 0.022724315524101257, -0.006299726199358702, -0.02195221371948719, 0.010590167716145515, -0.0244715865701437, -0.032604023814201355, -0.0445275604724884, -0.02693033404648304, -0.03752763941884041, -0.12792128324508667, -0.05881640687584877, -0.037286918610334396, 0.0022208276204764843, -0.18805599212646484},
        {0.0337778739631176, -1.1817803680091998e-17, 0.0029974672943353653, 0.011398320086300373, -0.015299337916076183, -0.002546461531892419, 0.009085106663405895, -0.02926895022392273, 0.013156915083527565, 0.044426362961530685, 0.06063714995980263, -0.049831464886665344, -0.0046715461649000645, 0.13289961218833923, 0.1008773222565651, -0.08750061690807343, -0.001669408055022359, 0.17328214645385742},
        {-0.03941977396607399, -1.3051869472876185e-17, -0.0038785513024777174, -0.012178865261375904, 0.0056819310411810875, 0.01189232524484396, 0.007201041094958782, 0.011680269613862038, 0.0062727793119847775, -0.013139101676642895, -0.019589940086007118, 0.06919104605913162, -0.017449257895350456, -0.03658788278698921, -0.055722370743751526, 0.0830659344792366, -0.001033059903420508, -0.008668850176036358},
        {0.035329289734363556, -9.540979117872439e-18, 0.003003331832587719, 0.01018651481717825, 0.0013500502100214362, -0.02184797078371048, -0.002211006823927164, 0.00575180584564805, -0.0095882099121809, -0.0040341331623494625, 0.0026980112306773663, -0.026304658502340317, 0.021507058292627335, -0.007411313243210316, 0.011147438548505306, -0.009553813375532627, 0.0012655388563871384, -0.025550518184900284},
        {-0.01435982994735241, -3.469446951953614e-18, -0.0053222221322357655, 0.00496985437348485, -0.011917294934391975, 0.019064508378505707, -0.00408199243247509, -0.00413424102589488, 0.0013895243173465133, -0.0006965920911170542, 0.0020163787994533777, 0.006866953801363707, -0.002269503427669406, -0.00040503451600670815, -0.00121109071187675, 0.0004197673115413636, 7.05014172126539e-05, -0.0004859374894294888},
        {-0.005785562563687563, -2.0383000842727483e-17, -0.0006044444162398577, -0.001444213674403727, 0.01574692502617836, -0.003115669824182987, 0.010826420038938522, 0.003241951111704111, 0.009003596380352974, -0.0025037319865077734, -0.0048438794910907745, 0.008489014580845833, -0.004725489299744368, 0.013226227834820747, -0.01940448209643364, 0.006205189507454634, -0.003082120092585683, 0.02101481892168522},
        {0.019238466396927834, 5.609960007440254e-18, -0.0014180561993271112, -0.003954825457185507, -0.012674885801970959, -0.0076720998622477055, -0.004717914387583733, 0.004685124848037958, -0.02724197693169117, 6.584966467926279e-05, -0.01650880090892315, -0.018148286268115044, 0.028984352946281433, -0.030181480571627617, 0.021912403404712677, -0.06423428654670715, -0.008293536491692066, 0.0419032983481884},
        {-0.03225633502006531, 1.3010426069826053e-17, 0.003273061476647854, 0.0034664361737668514, 0.007674791384488344, 0.00513456342741847, -0.013943948782980442, -0.0019359420984983444, 0.03291148692369461, 0.017288096249103546, 0.016983820125460625, -0.014841536991298199, -0.08461619913578033, -0.00451702531427145, 0.042791638523340225, 0.05391725152730942, 0.04527053236961365, -0.24349626898765564},
        {0.04014620557427406, -1.3456873644394398e-17, -0.0002917624660767615, 0.0008221353637054563, 0.0006384917069226503, -0.004094548057764769, 0.0049061900936067104, -0.006434808950871229, -0.016618411988019943, -0.025668276473879814, 0.035473790019750595, 0.013507157564163208, 0.10300641506910324, 0.040839869529008865, -0.037965673953294754, 0.08296015858650208, -0.056519586592912674, 0.2930104732513428},
        {-0.032178424298763275, -2.862293735361732e-17, 0.002977307653054595, -0.005069071892648935, -0.007899311371147633, 0.005375147331506014, 0.010222461074590683, -0.004733203444629908, -0.0007243197760544717, 0.008116845041513443, -0.047723762691020966, 0.040137700736522675, -0.028484271839261055, -0.0031397962011396885, -0.00101351214107126, -0.1103803887963295, 0.029387997463345528, -0.140339195728302},
        {0.009595098905265331, 4.721779208768687e-17, 0.004069912247359753, -0.0023033705074340105, 0.011512737721204758, 0.0032396644819527864, -0.003936462104320526, 0.010895341634750366, 7.785655907355249e-05, 0.006411024369299412, 0.012675671838223934, -0.04587940871715546, -0.019317971542477608, -0.02684064581990242, -0.010197927244007587, 0.03231080248951912, -0.01749529130756855, 0.0686367005109787},
        {0.019912447780370712, -1.7780915628762273e-17, 0.0011157079134136438, 0.0007888990803621709, -0.008163964375853539, -0.009328299202024937, -0.0006914410041645169, -0.001852352754212916, 0.006545696407556534, -0.008835973218083382, -0.005167558789253235, 0.024322234094142914, 0.0007827247027307749, 0.01905512623488903, 0.011650558561086655, 0.0008264210191555321, 0.020215773954987526, -0.07364160567522049},
        {-0.04157333821058273, 4.85722573273506e-17, -0.006067116744816303, -0.004470304120332003, -0.006319331470876932, 0.008971037343144417, 0.009873851202428341, -0.006002455484122038, -0.007342218421399593, 0.008815565146505833, 0.001204473664984107, -0.012382433749735355, 0.009758413769304752, -0.015237088315188885, -0.006852426566183567, -0.013879235833883286, -0.021802950650453568, 0.07147043943405151},
        {0.040367595851421356, 1.691355389077387e-17, 0.0012701097875833511, 0.010851164348423481, 0.024528929963707924, -0.011961061507463455, -0.00972855743020773, 0.010379989631474018, 0.02054070681333542, 0.003008095547556877, 0.001344857970252633, -0.0013467964017763734, -0.02529100328683853, -0.008260669186711311, 0.019359707832336426, 0.0033116713166236877, 0.03388568386435509, -0.10049588978290558},
        {-0.022518783807754517, -2.8202021535836034e-17, -0.009720533154904842, -0.003433744190260768, -0.028518302366137505, 0.01203703973442316, -0.009307656437158585, -0.003559148870408535, -0.031430359929800034, -0.02814207598567009, 0.015221305191516876, -0.011385181918740273, 0.04737181216478348, 0.055305592715740204, -0.029130185022950172, 0.04268069192767143, -0.027551842853426933, 0.08046825230121613},
        {0.0017014463664963841, -1.0408340855860843e-16, 0.007093275897204876, 0.0016717355465516448, 0.014356168918311596, -0.007248196750879288, -0.0035249004140496254, -0.0038980559911578894, 0.021915767341852188, 0.037540070712566376, 0.007462077774107456, 0.022912729531526566, -0.04300032556056976, -0.07690627127885818, -0.01953636296093464, -0.0418124794960022, -0.009719565510749817, 0.02106408402323723},
        {0.014679179526865482, 1.0408340855860843e-17, -0.00215533166192472, -0.0014203437604010105, -0.0037978184409439564, -0.0009450918878428638, 0.02164369635283947, -0.004385451320558786, -0.005441807210445404, -0.013103391975164413, -0.03878670930862427, -0.0024191655684262514, 0.02528141252696514, 0.035186294466257095, 0.0501888170838356, 0.017218617722392082, 0.02494313381612301, -0.06134191155433655},
        {-0.025918075814843178, 5.551115123125783e-17, 0.0018758116057142615, 0.006085677072405815, 0.0026165021117776632, 0.00943268183618784, -0.009955331683158875, 0.008261413313448429, 0.001754922210238874, -0.006778914947062731, 0.027232667431235313, -0.0064699649810791016, -0.010530258528888226, 0.0034605779219418764, -0.019917359575629234, -0.02479875646531582, -0.01662004366517067, 0.03793499246239662},
        {0.02715720608830452, 7.385341478475574e-18, -0.0019948643166571856, -0.007578365039080381, 0.004590383730828762, -0.016298212110996246, 0.0019143050303682685, 0.0022060805931687355, -0.007497874554246664, 0.0030374617781490088, -0.0141256432980299, 0.0038003523368388414, 0.002917592879384756, 0.003538169665262103, -0.00016949084238149226, 0.01585153117775917, 0.011880539357662201, -0.025466132909059525},
        {-0.020207658410072327, -4.119968255444917e-17, 0.001884493394754827, -0.0013547190465033054, -0.015495061874389648, 0.015537478029727936, -0.006223680917173624, -0.010446010157465935, 0.0013928969856351614, -0.000319293380016461, 0.0036381524987518787, -0.0058744666166603565, -0.012183116748929024, -0.008696277625858784, 0.005582540761679411, 0.003610681276768446, -0.010394609533250332, 0.02059510350227356},
        {0.00884757749736309, 0.0, 0.008276599459350109, 0.00026512282784096897, 0.0181671641767025, -0.00525673758238554, 0.013859289698302746, 0.005578009877353907, 0.003352563828229904, 0.006492140237241983, 0.006657061167061329, -0.001358242705464363, 0.013989033177495003, 0.016658004373311996, -0.013994629494845867, 0.0007651406340301037, 0.025524836033582687, -0.046257130801677704},
        {0.00763699458912015, -6.5052130349130266e-18, -0.006838280241936445, 0.0013466720702126622, -0.012105440720915794, -0.00023625738685950637, -0.009135540574789047, 0.006182779558002949, 0.00836794450879097, -0.00338256754912436, 0.008791204541921616, 0.011012994684278965, 0.012018706649541855, -0.03137728571891785, 0.002048137364909053, -0.028956755995750427, -0.038977622985839844, 0.06892429292201996},
        {-0.019694004207849503, -1.686012960373152e-17, 0.001998627558350563, -0.0018213522853329778, 0.007196491118520498, -0.0002797003835439682, -0.003788769943639636, -0.004747449420392513, -0.01651117391884327, -0.01081535592675209, -0.015919534489512444, 0.004038725979626179, -0.03696326166391373, 0.02717585675418377, 0.027443330734968185, 0.010812612250447273, 0.0079684779047966, -0.016105489805340767},
        {0.02476569265127182, 1.9081958235744878e-17, -0.0028182079549878836, 0.0016513292212039232, -0.0034797540865838528, 0.0028062916826456785, 0.005320425610989332, -0.002593141747638583, 0.011919260956346989, 0.010996287688612938, -0.0033499491401016712, -0.018486453220248222, 0.023436693474650383, -0.013855568133294582, -0.02651543915271759, 0.02931434102356434, 0.028031375259160995, -0.04376206174492836},
        {-0.023582158610224724, -3.427355370175486e-17, -0.0007491883006878197, -0.0019954699091613293, -0.0022543661762028933, -0.0026079744566231966, 0.001147289527580142, -0.002608488081023097, -0.0038434406742453575, -0.001138941035605967, 0.005912775173783302, 0.013203451409935951, -0.0006902116001583636, 0.004973279777914286, 0.010920392349362373, -0.019701527431607246, -0.025921925902366638, 0.03948899731040001},
        {0.012806673534214497, -1.6479873021779667e-17, -0.001414559897966683, 0.0023073856718838215, 0.0021436368115246296, -0.0037666084244847298, -0.007226035464555025, 0.005631621927022934, 0.0003197552287019789, 0.002167146187275648, -0.0001763840118655935, -0.006327297538518906, -0.0003848450432997197, -0.0009673002641648054, -0.0024776665959507227, 0.0041968259029090405, 0.02022356167435646, -0.02856743149459362},
        {0.0035384437069296837, 4.7732788119617483e-17, 0.0019442312186583877, 0.0022647634614259005, 0.002131217857822776, 0.0050998954102396965, 0.005551459267735481, -0.0020931928884238005, -0.0009413778316229582, -0.005051376763731241, 0.005083385854959488, -0.0002306169772055, -0.0042173960246145725, 0.004851978737860918, -0.0018650999991223216, -0.003641798160970211, -0.02251615561544895, 0.030386079102754593},
        {-0.015518753789365292, 1.3010426069826053e-18, -0.0006486009224317968, -0.0004116113414056599, -0.0021380004473030567, -0.0012922683963552117, 0.0028784635942429304, -0.0007765653426758945, 0.004682435654103756, 0.0002824658586177975, -0.0018559261225163937, 0.0053152223117649555, 0.013394494540989399, -0.007751806173473597, 0.007709092926234007, -0.0013660188997164369, 0.030727317556738853, -0.038879603147506714},
        {0.019625814631581306, -2.42861286636753e-17, 0.001764086540788412, -0.0006588456453755498, 0.0023681886959820986, 0.001495719887316227, -0.005929287988692522, 0.004600154235959053, -0.010218572802841663, 0.00199987948872149, -0.005756451282650232, -0.0007705788593739271, -0.016913041472434998, -0.001162625034339726, -0.008754365146160126, 0.013808310963213444, -0.03900571167469025, 0.04754546284675598},
        {-0.018321096897125244, -3.0791341698588326e-17, 0.0004991773166693747, -0.0004240244161337614, -0.0038436606992036104, -0.0024481501895934343, 0.002160365227609873, -0.0028736311942338943, 0.008294252678751945, 0.0003905407793354243, -0.0026752131525427103, -0.003432859666645527, 0.008555794134736061, 0.016279790550470352, 0.002047527115792036, -0.00640953378751874, 0.02620462328195572, -0.031143665313720703},
        {0.011780413798987865, 1.2563978495257708e-17, 0.0017295401776209474, 0.0009446163894608617, 0.0012127863010391593, 0.0024551586247980595, -0.0005008059670217335, -0.0020947072189301252, -0.00042364533874206245, -0.0017209536163136363, 0.006512169726192951, -0.0027592661790549755, -0.0056808083318173885, -0.013574902899563313, -0.0028201849199831486, -0.012981167994439602, -0.007133090402930975, 0.008215637877583504},
        {-0.0007579465163871646, -3.707971429900425e-17, -0.0010596083011478186, -0.0029121257830411196, 0.0021124151535332203, -0.0032134868670254946, 0.0009686407865956426, 0.0012802137061953545, -0.0023217732086777687, 0.0017541836714372039, 0.003667235840111971, 0.00710993492975831, 0.007222767453640699, -0.003254116512835026, 0.0003706464485730976, 0.00893876887857914, 0.0041873157024383545, -0.004236937966197729},
        {-0.010643108747899532, -4.064710108984537e-18, 0.001054279156960547, 0.0028269547037780285, -0.0054355463944375515, 0.0024895882233977318, 0.0014347875257954001, -3.229423236916773e-05, -0.000617140089161694, 0.0012424711603671312, -0.00763934850692749, -0.007754034828394651, -0.003415008308365941, 0.0068586282432079315, 0.001832817797549069, 0.0017387709813192487, -0.008900072425603867, 0.008828741498291492},
        {0.019846659153699875, -9.324138683375338e-18, -0.0027358601801097393, -0.003874200629070401, 0.008751671761274338, -0.0009382012067362666, -0.0022024093195796013, 0.00047489628195762634, 0.0013423485215753317, -0.002450106432661414, 0.006490552797913551, 0.009535062126815319, 0.0018992576515302062, -0.0009509354713372886, 0.00103294407017529, -0.0006332279881462455, 0.010066001676023006, -0.009606617502868176},
        {-0.022172389551997185, -1.4298701971234515e-17, -0.0010010373080149293, 0.0035231581423431635, -0.007913847453892231, -0.0005568433552980423, -0.0017195226391777396, -0.0007170505705289543, 0.00018206740787718445, -0.0004913560696877539, -0.0050702826119959354, -0.0056005180813372135, -0.004932655021548271, -0.006292835809290409, -0.0007840589969418943, 0.00013292721996549517, -0.008077744394540787, 0.007396827917546034},
        {0.017860401421785355, -2.6454533008646308e-17, 7.205776637420058e-05, -0.0026175291277468204, 0.00510853948071599, 0.004062838852405548, 0.0051627629436552525, 0.0006381802959367633, 0.0012098060688003898, 0.00042868725722655654, 0.0015732969623059034, 0.004141220822930336, 0.004186111502349377, 0.014930074103176594, -0.00197509303689003, -0.0003555192961357534, 0.0012973272241652012, -0.0013400039169937372},
        {-0.009835779666900635, -3.469446951953614e-18, -0.002288153162226081, 0.0027397307567298412, -0.0031596345361322165, -0.007268622517585754, -0.002867264673113823, 0.0009867859771475196, -0.007788734510540962, 0.00033994921250268817, -0.0021508692298084497, -0.00964878499507904, 0.0007628630846738815, -0.016778938472270966, 0.0038018308114260435, -0.006955500692129135, 0.0029799286276102066, -0.002480017254129052},
        {-0.001410102122463286, 2.992397996059992e-17, 0.0015097681898623705, -0.0022325487807393074, -0.0005279547767713666, 0.007238344289362431, -0.0018527382053434849, 0.0002824091643560678, 0.010893825441598892, -0.0009458192507736385, 0.0050263842567801476, 0.003250756999477744, -0.0037097439635545015, 0.008259927853941917, -0.0010691171046346426, 0.00783971231430769, 0.003906993195414543, -0.002812489401549101},
        {0.012142650783061981, 1.8837226925353714e-17, 0.000511971942614764, 0.0021733352914452553, 0.0037148715928196907, -0.005214587319642305, 0.001861288445070386, -0.00303265149705112, -0.004134114366024733, 0.002789194229990244, -0.005743847228586674, 0.0067830272018909454, 0.0006033838726580143, -0.0037702671252191067, 0.0006682504317723215, -0.0026155284140259027, -0.010992877185344696, 0.008114449679851532},
        {-0.019871391355991364, -2.862293735361732e-17, 0.0012374441139400005, 0.00029133562929928303, -0.003982085734605789, 0.0026784506626427174, 0.0006672382587566972, 0.0021809085737913847, -0.0002453043998684734, -0.002994024660438299, 0.004472312983125448, -0.00603884132578969, 0.0010757133131846786, 0.004932618234306574, -0.0013630216708406806, 0.0004884325317107141, 0.012566275894641876, -0.008836955763399601},
        {0.02025935985147953, -1.0829255019280901e-17, 0.0017190987709909678, -0.00015646651445422322, 0.003554865252226591, -0.00032158184330910444, -0.001121749635785818, -0.0002908745955210179, -0.0005770688876509666, 0.0017468677833676338, -0.0032046716660261154, 0.0028933496214449406, 0.0014824297977611423, -0.003053904976695776, -0.002004860667511821, 0.0016519814962521195, -0.009988028556108475, 0.006783835124224424},
        {-0.012369000352919102, -1.734723475976807e-17, 9.903451427817345e-05, -0.0007010243134573102, -0.003030734369531274, -0.0011788452975451946, -0.00012542519834823906, 8.403287938563153e-05, 0.00040239180088974535, 0.0007390368264168501, 0.003499277401715517, -0.00031171462615020573, -0.0027174395509064198, 0.0028024499770253897, 0.0012896787375211716, -0.006034225225448608, 0.005329803563654423, -0.0034333423245698214},
        {2.4055689209490083e-05, 6.451789161460983e-18, 0.0005779903731308877, -0.0007631314219906926, 0.0023504409473389387, 0.0010691434144973755, 0.0005193054093979299, 0.00029597285902127624, -0.00038777998997829854, -0.0023785708472132683, -0.004600731190294027, -0.002562114270403981, 0.0038403430953621864, -0.0015202363720163703, 0.008785709738731384, 0.0014357746113091707, -0.018693652004003525, 0.010712051764130592},
        {0.012026995420455933, -3.903127820947816e-18, -0.0020961069967597723, -0.0007512083393521607, -0.0017990991473197937, 0.0005787565605714917, -0.0009480961598455906, -0.0003422809822950512, -0.000923705636523664, 0.003677807515487075, 0.005609449930489063, 0.001438360894098878, -0.0070953103713691235, -0.0051347785629332066, -0.010178911499679089, 0.011856901459395885, 0.04032989591360092, -0.02263534441590309},
        {-0.019167883321642876, -1.734723475976807e-17, -0.0001298566348850727, -0.000775687862187624, 0.0017112324712798, -0.0014640239533036947, 0.0020237083081156015, -0.0015821806155145168, 0.000976219424046576, -0.00434146961197257, 0.0006694755284115672, 0.0009349024039693177, 0.005821978207677603, 0.007233717944473028, 0.00043373435619287193, -0.007941142655909061, -0.03607361018657684, 0.019634123891592026},
        {0.01960960030555725, -3.599551212651875e-17, -0.0013298894045874476, 0.0002802734961733222, -0.0028226927388459444, 0.0005491729243658483, -0.002501443261280656, 0.0024481506552547216, 0.0007559425430372357, 0.00234995293430984, -0.006681634578853846, 0.0010782036697492003, -3.769039540202357e-05, -0.0014194637769833207, 0.0019040952902287245, -0.0008316204184666276, 0.018839387223124504, -0.009681602008640766},
        {-0.013086767867207527, 2.037023413715334e-17, -0.0004928332637064159, 0.0005532926879823208, 0.004072527401149273, -0.00020122691057622433, 0.002752898260951042, -0.0011634909315034747, -0.0005415548803284764, -0.001654088613577187, 0.004561527632176876, -0.0024285141844302416, -0.0006072257529012859, -0.0004231515049468726, -0.00254519353620708, -0.003260422730818391, -0.009505294263362885, 0.004587872885167599},
        {0.002374710515141487, 2.7755575615628914e-17, 0.0007871341076679528, 0.0008123160223476589, -0.0034083810169249773, -0.0012883623130619526, -0.0017647728091105819, -0.00047683363663963974, 0.0010961072985082865, 0.0018636980094015598, -0.0021423117723315954, 0.00042606666102074087, -0.002798989415168762, -0.0029041715897619724, 0.0048694307915866375, 0.003154259640723467, 0.010693068616092205, -0.004619404207915068},
        {0.008424951694905758, -3.469446951953614e-18, -2.6768393581733108e-05, 0.0010774489492177963, 0.002734699286520481, 0.0038128329906612635, -0.0007094236207194626, 0.0017786999233067036, -0.000853569305036217, -0.0019276139792054892, 0.001565153244882822, -0.00033210203400813043, 0.005358052905648947, 0.004734097048640251, -0.003770134411752224, 0.0027489126659929752, -0.017498796805739403, 0.007174498867243528},
        {-0.015983063727617264, -3.469446951953614e-17, 0.0015570874093100429, 0.0003866008191835135, -0.0017409734427928925, -0.00448003550991416, 0.0016052961582317948, -0.002823488786816597, -0.0008336251485161483, 0.0021343387197703123, 0.0005576001713052392, 0.0024866496678441763, -0.004349987953901291, -0.0036625422071665525, 0.001894830958917737, -0.0020014666952192783, 0.01643148809671402, -0.0064445617608726025},
        {0.017270950600504875, -2.3839681089106954e-17, 0.0005907919839955866, 0.00016332745144609362, -0.0008715154253877699, 0.0047251502983272076, 0.00029638546402566135, 0.002159033203497529, -0.0008968469919636846, -0.00033549696672707796, -0.0017561730928719044, -0.003046646248549223, 0.0023200453724712133, 0.0016328528290614486, -0.002764084143564105, -0.0019571443554013968, -0.008875951170921326, 0.003283972619101405},
        {-0.012749102897942066, -9.974659986866641e-18, 0.00019676722877193242, -0.0005577901029027998, 0.0029454827308654785, -0.004417153540998697, -0.001488498062826693, -7.782116153975949e-05, 0.002805558731779456, -0.0015365482540801167, -0.00016905077791307122, 0.00037096827873028815, -0.003148840507492423, -0.0017959901597350836, 0.003514602780342102, 0.0001933712774189189, 0.005381453782320023, -0.001768803340382874},
        {0.004937326069921255, 2.7755575615628914e-17, 0.00016238634998444468, -3.996363375335932e-05, -0.004570793826133013, 0.0028054257854819298, 0.00110883719753474, -0.0005925908335484564, -0.0010287658078595996, 0.0013883229112252593, 0.0018881018040701747, 0.0019398105796426535, 0.0020487371366471052, 0.0028176645282655954, 0.000831244804430753, 0.001354691805317998, -0.011330574750900269, 0.003288696985691786},
        {0.005020720884203911, -6.5052130349130266e-18, -6.12325529800728e-05, -0.0008680653409101069, 0.005976847838610411, -0.0010218678507953882, -0.0007008520769886672, -0.0002287138777319342, -0.00027707809931598604, -0.0006615709862671793, -0.0018154997378587723, -0.0006052578100934625, 0.0005228999070823193, -0.0024147743824869394, -0.0028060628101229668, 0.0011436433997005224, 0.018010839819908142, -0.004956374876201153},
        {-0.01478621456772089, 3.089189956411456e-18, -0.0013912306167185307, -0.0008617419516667724, -0.005383660551160574, -0.0009135791915468872, 4.368960071587935e-05, 0.0009273728355765343, 0.0004963689134456217, 0.00028217872022651136, 0.0008203195757232606, -0.0007613025954924524, -0.0010152143659070134, 0.001840926706790924, 0.0006975210853852332, -0.002110792091116309, -0.017232296988368034, 0.00436697993427515},
        {0.019475428387522697, -1.3010426069826053e-17, -0.0011586048640310764, -0.001003932673484087, 0.003108760342001915, 0.0029418577905744314, -0.00032345170620828867, -0.00045472761848941445, -0.0019036029698327184, 0.0009139752364717424, -0.00048224953934550285, 0.0020798910409212112, 0.0012024245224893093, -0.0015226677060127258, 7.648916653124616e-05, 0.0014592708321288228, 0.015244443900883198, -0.003427211195230484},
        {-0.015398413874208927, -7.359808067327287e-18, -0.001049399608746171, 0.0012474720133468509, -0.0011991542996838689, -0.0035207835026085377, 0.0008334366139024496, -0.0011494314530864358, 0.0027622173074632883, -0.001560400938615203, 0.0009125712094828486, -0.0030514311511069536, -0.0012478645658120513, 0.0014783585211262107, -0.0004106190463062376, -0.001388046657666564, -0.014051481150090694, 0.002823395887389779},
        {0.0059251026250422, 2.862293735361732e-17, 0.001265622559003532, 0.0009036664851009846, -9.165002120425925e-05, 0.0024821448605507612, 0.0001004799923975952, 0.0014910813188180327, -0.0012050390942022204, 0.0005107905017212033, 0.000600694736931473, 0.002462558215484023, 0.0024629049003124237, -0.002290476579219103, 0.0013036718592047691, 0.0001685663592070341, 0.013967652805149555, -0.0023993710055947304},
        {0.0014672304969280958, 1.867616824264474e-17, 0.0004625820438377559, 0.000260400352999568, 0.0008258430170826614, -0.0014637367567047477, -0.0006646972615271807, -6.913090328453109e-05, -0.0005679216701537371, -7.673889194848016e-05, -0.002065087202936411, -0.0007479896303266287, -0.003787448862567544, 0.0012393698561936617, -0.0012168625835329294, 0.0014555971138179302, -0.016488434746861458, 0.0024081538431346416},
        {-0.00384797272272408, 1.431146867680866e-17, 0.0008925404981710017, -5.761178181273863e-05, -0.0006485512712970376, 0.0009152175625786185, 0.0003679382207337767, -0.0006609886768274009, 0.00041968270670622587, 0.0001647257449803874, 0.0002961732679978013, -0.0003868044586852193, 0.0024790926836431026, 0.0007898061303421855, 0.0003278698422946036, -0.001289722858928144, 0.017241278663277626, -0.00214649667032063},
        {0.002548082498833537, -3.2959746043559335e-17, -0.00022307431208901107, -0.0006116009317338467, 0.00018619158072397113, -0.0003849838685709983, -0.0001716038241283968, 0.00031058077001944184, 0.00012724255793727934, -4.490939772949787e-06, 0.0006371099152602255, -0.0001105378323700279, -0.0007383995689451694, -0.0007093574968166649, -0.0001330435334239155, 0.0005596224800683558, -0.01641325280070305, 0.0016183379339054227},
        {-0.0007298215059563518, -3.122502256758253e-17, -0.00021834504150319844, 0.00012545232311822474, -4.382674160297029e-05, 4.113921750104055e-05, 2.9700941013288684e-05, -4.962574621458771e-06, -4.346515197539702e-05, 2.5660789106041193e-05, -8.429210720350966e-05, 0.00016491733549628407, 7.531558367190883e-05, 5.787730697193183e-05, 0.00013422567280940711, -0.00013330999354366213, 0.016322284936904907, -0.001205375068821013},
        {0.0001282918528886512, 1.641289620758125e-17, -3.383051443961449e-05, 2.5205915790138533e-06, 2.331155883439351e-05, 1.1037554031645413e-05, 6.300863333308371e-06, 1.473754991820897e-06, -2.3369282644125633e-05, -1.4261660908232443e-05, 8.357295655514463e-07, 1.7540111002745107e-05, 2.4815197321004234e-05, 1.4283853488450404e-05, 1.1086365702794865e-05, -1.4970521988288965e-05, -0.016202962026000023, 0.0007981364615261555},
        {1.0091117474075872e-05, -3.144186300207963e-18, -1.8778868252411485e-05, 1.4638869743066607e-06, -2.5632084543758538e-06, -5.203209525461716e-07, 3.078782128795865e-06, 1.0417413420782395e-07, -4.724712709958112e-07, 4.401823616717593e-07, 1.587348918974385e-07, 6.201510132086696e-06, 6.042472705303226e-06, 2.573076926637441e-06, 6.935264536878094e-06, -5.993072136334376e-06, 0.01612575352191925, -0.0003960261819884181},
        {-6.326660513877869e-05, 0.0, -1.5040125617815647e-05, 0.0, 6.361331543303095e-06, 0.0, 2.3142474674386904e-06, 0.0, -8.515919944329653e-06, 0.0, 2.0439271963823558e-07, 0.0, 8.860672096488997e-06, 0.0, 5.417402917373693e-06, 0.0, -0.016122575849294662, 0.0}
    };
    for (auto i = 0; i < 9; i++) {
        for (auto j = 0; j < 129; j++) {
            // std::cout << "arr_stft_matrix.getitem("<< i << "," << j << ") = " << arr_stft_matrix.getitem(i,j) << " vs ";
            // std::cout << vec2d_x[j][i * 2 + 0] << " + " << vec2d_x[j][i * 2 + 1] << "j" << std::endl;
            EXPECT_NEAR( arr_stft_matrix.getitem(i,j).real(), vec2d_x[j][i * 2 + 0], 1e-6);
            EXPECT_NEAR( arr_stft_matrix.getitem(i,j).imag(), vec2d_x[j][i * 2 + 1], 1e-6);
        }
    }
}

TEST_F(ROSACXXTest, test_0x04_stft_double) {
    int n_fft=256;
    int hop_length=128;
    std::vector<double> vec_y = {-0.0014068223536014557, -0.0004460722266230732, -0.0004109807778149843, 9.992090053856373e-05, 4.315042679081671e-05, -0.00017485348507761955, -0.00036783376708626747, 0.00014553137589246035, 0.0005055782967247069, 0.001492994837462902, 0.0018555219285190105, 0.0009291315800510347, -0.0004074387834407389, -0.00203903391957283, -0.0012686776462942362, -0.0005347277619875968, 0.0008994140662252903, 0.0009759354288689792, 0.0010019976180046797, -0.0012960718013346195, -0.0006973362760618329, -0.0020776470191776752, 0.00016815122216939926, -0.0031369556672871113, 0.01159406453371048, 0.03337440639734268, 0.02283109351992607, 0.010623950511217117, -0.001329911290667951, -0.009193040430545807, -0.019243469461798668, -0.029792027547955513, -0.04080042988061905, -0.04650205746293068, -0.03843670338392258, -0.021050110459327698, -0.0024911672808229923, 0.00935092568397522, 0.014292588457465172, 0.015489764511585236, 0.019572250545024872, 0.028017811477184296, 0.036625221371650696, 0.03935271501541138, 0.0433541014790535, 0.05012625455856323, 0.05469449236989021, 0.04744698107242584, 0.026467904448509216, -0.006240345537662506, -0.0398687943816185, -0.06225116178393364, -0.06726276129484177, -0.056480687111616135, -0.03534869849681854, -0.01170082576572895, 0.007297648582607508, 0.018727723509073257, 0.022423971444368362, 0.020184427499771118, 0.012019908986985683, 0.0029166322201490402, -0.005271380301564932, -0.014409756287932396, -0.02603866346180439, -0.03721465915441513, -0.0429764948785305, -0.039188288152217865, -0.027365241199731827, -0.013183844275772572, -0.00181596539914608, 0.004778219386935234, 0.009855492040514946, 0.01744949072599411, 0.027601804584264755, 0.035798609256744385, 0.03886621072888374, 0.03735964000225067, 0.03502126783132553, 0.03373950347304344, 0.031620558351278305, 0.02614063024520874, 0.014256688766181469, -0.004047009162604809, -0.022266441956162453, -0.032353997230529785, -0.03203771635890007, -0.02219783514738083, -0.007111448794603348, 0.005347900092601776, 0.009880674071609974, 0.0066346232779324055, -0.0004970282316207886, -0.006344420835375786, -0.009686545468866825, -0.012278868816792965, -0.016028553247451782, -0.0222843699157238, -0.03069547563791275, -0.03723090887069702, -0.03714127093553543, -0.02952701598405838, -0.019343767315149307, -0.010854330845177174, -0.004308959469199181, 0.0037673991173505783, 0.01798669993877411, 0.033535294234752655, 0.04388025775551796, 0.045848533511161804, 0.0392153263092041, 0.03013923205435276, 0.02509511634707451, 0.02372949756681919, 0.022049501538276672, 0.017553692683577538, 0.012078279629349709, 0.004535749554634094, -0.003987270873039961, -0.009363023564219475, -0.012147679924964905, -0.011987500824034214, -0.009692380204796791, -0.010687463916838169, -0.013200373388826847, -0.013032263144850731, -0.012485704384744167, -0.011432180181145668, -0.010646897368133068, -0.012932207435369492, -0.020579712465405464, -0.03134956955909729, -0.03886033967137337, -0.04039456695318222, -0.03660256043076515, -0.029507789760828018, -0.023579441010951996, -0.018613280728459358, -0.009752350859344006, 0.00686682341620326, 0.029274210333824158, 0.04751427844166756, 0.054110635071992874, 0.047942787408828735, 0.03554447740316391, 0.026711059734225273, 0.02367260307073593, 0.02416268363595009, 0.02537360228598118, 0.024912800639867783, 0.023875322192907333, 0.025871362537145615, 0.029434887692332268, 0.028033146634697914, 0.02039302885532379, 0.008165058679878712, -0.007304648868739605, -0.021793104708194733, -0.03080257773399353, -0.0339021235704422, -0.03445583954453468, -0.035097815096378326, -0.03617805615067482, -0.03584911674261093, -0.033943984657526016, -0.03358352556824684, -0.036346495151519775, -0.04011525958776474, -0.04204111546278, -0.04074306786060333, -0.035313282161951065, -0.02516181394457817, -0.009281730279326439, 0.008984100073575974, 0.025454290211200714, 0.0394439734518528, 0.04617086052894592, 0.04273972287774086, 0.03482932597398758, 0.027848679572343826, 0.023764166980981827, 0.024484384804964066, 0.02936861291527748, 0.03469174727797508, 0.038923244923353195, 0.04341297969222069, 0.046438101679086685, 0.04571108520030975, 0.04004263877868652, 0.027997596189379692, 0.011825518682599068, -0.00496296351775527, -0.020059894770383835, -0.030646102502942085, -0.03482921048998833, -0.03641200438141823, -0.03821137547492981, -0.037802547216415405, -0.037042226642370224, -0.040509097278118134, -0.044764187186956406, -0.0465412512421608, -0.0472559854388237, -0.04466653987765312, -0.03860020637512207, -0.03263360634446144, -0.02690323069691658, -0.01971283182501793, -0.012620959430932999, -0.0048604258336126804, 0.003738419385626912, 0.01188720390200615, 0.020451372489333153, 0.030747290700674057, 0.04133005067706108, 0.050765473395586014, 0.05699166655540466, 0.056178975850343704, 0.04987478628754616, 0.040889009833335876, 0.03403116762638092, 0.03159957006573677, 0.030909286811947823, 0.02934325486421585, 0.02761862426996231, 0.02458232268691063, 0.021196812391281128, 0.018042724579572678, 0.01483222283422947, -0.0013959951465949416, -0.023120811209082603, -0.030100302770733833, -0.03443191200494766, -0.03924756124615669, -0.04034653306007385, -0.03746388107538223, -0.03995493799448013, -0.045327138155698776, -0.04883623868227005, -0.05065571144223213, -0.0509793683886528, -0.046035733073949814, -0.03842582553625107, -0.0279848650097847, -0.011242146603763103, -0.0051415544003248215, -0.0012773916823789477, 0.004085723776370287, 0.00926685705780983, 0.015837378799915314, 0.024083545431494713, 0.03354068845510483, 0.04067457839846611, 0.04674595594406128, 0.05006221681833267, 0.04940654709935188, 0.0457560196518898, 0.041767898947000504, 0.03919098153710365, 0.03846704959869385, 0.037300631403923035, 0.03528008610010147, 0.03118027001619339, 0.025712594389915466, 0.021324271336197853, 0.01535768061876297, 0.0012020511785522103, -0.020164938643574715, -0.042615342885255814, -0.0601249560713768, -0.06523989140987396, -0.05850270390510559, -0.04848217964172363, -0.04059814289212227, -0.035203758627176285, -0.033469393849372864, -0.034556496888399124, -0.0340707004070282, -0.03345156088471413, -0.03370961174368858, -0.03200259432196617, -0.030991680920124054, -0.031147629022598267, -0.02509692683815956, -0.012720305472612381, 0.0012244898825883865, 0.017322583124041557, 0.03296179324388504, 0.043673545122146606, 0.05071231722831726, 0.05626234784722328, 0.060374028980731964, 0.061879102140665054, 0.05966979265213013, 0.055192045867443085, 0.04867646470665932, 0.043769776821136475, 0.044128142297267914, 0.047975752502679825, 0.05332964286208153, 0.05322148650884628, 0.03501460701227188, -0.0013935620663687587, -0.0392744317650795, -0.06604442745447159, -0.08044910430908203, -0.08339697867631912, -0.07801200449466705, -0.06902045756578445, -0.056440334767103195, -0.04031221568584442, -0.023607777431607246, -0.009458974935114384, -0.0040890490636229515, -0.011293753050267696, -0.02624017745256424, -0.039894916117191315, -0.046495310962200165, -0.0446019321680069, -0.03530823439359665, -0.019828006625175476, -0.0026050880551338196, 0.01194712519645691, 0.02643408812582493, 0.041731853038072586, 0.05760619789361954, 0.07293449342250824, 0.07939381897449493, 0.07255841046571732, 0.059937745332717896, 0.049313776195049286, 0.043859537690877914, 0.046877823770046234, 0.05854570120573044, 0.06908174604177475, 0.07092572748661041, 0.05826810002326965, 0.029167331755161285, -0.011864861473441124, -0.05833500623703003, -0.09870538860559464, -0.12353213131427765, -0.12952397763729095, -0.11781053990125656, -0.09313185513019562, -0.06606137007474899, -0.0399797149002552, -0.01848326064646244, -0.005437223240733147, 0.0028134281747043133, 0.00580983329564333, 0.005395118147134781, 0.003665454685688019, -6.331503391265869e-05, -0.004320122301578522, -0.008666843175888062, -0.012524977326393127, -0.009127907454967499, 0.008290644735097885, 0.03240207955241203, 0.05237623304128647, 0.06299030780792236, 0.06227690726518631, 0.05471426993608475, 0.049715589731931686, 0.05370528623461723, 0.06470836699008942, 0.07992754876613617, 0.0962526947259903, 0.11108598113059998, 0.11972204595804214, 0.10865718871355057, 0.06468989700078964, -0.010849262587726116, -0.09555210918188095, -0.16572126746177673, -0.204950749874115, -0.20627020299434662, -0.18128930032253265, -0.14413627982139587, -0.10391842573881149, -0.06609126925468445, -0.03306754305958748, -0.0037808995693922043, 0.021147556602954865, 0.036657556891441345, 0.04268742352724075, 0.04082801938056946, 0.03312373533844948, 0.02489864081144333, 0.01848144829273224, 0.011077150702476501, 0.006270177662372589, 0.010499510914087296, 0.020692206919193268, 0.031808264553546906, 0.04034963250160217, 0.04427618533372879, 0.0467517152428627, 0.054424822330474854, 0.06844286620616913, 0.08588558435440063, 0.10353067517280579, 0.12335117906332016, 0.15110407769680023, 0.18035699427127838, 0.1825200617313385, 0.1274143010377884, 0.014689086005091667, -0.12180046737194061, -0.23400551080703735, -0.2960878610610962, -0.30686917901039124, -0.2766077518463135, -0.21912892162799835, -0.1512296497821808, -0.08724537491798401, -0.03450748696923256, 0.0038727223873138428, 0.030168628320097923, 0.04752672091126442, 0.060444317758083344, 0.06985829025506973, 0.07415691018104553, 0.07297383248806, 0.06333085894584656, 0.05003081634640694, 0.03702225536108017, 0.025074878707528114, 0.018075544387102127, 0.01428535208106041, 0.015618370845913887, 0.024177096784114838, 0.03753020614385605, 0.05197999253869057, 0.06712615489959717, 0.08289308100938797, 0.10458030551671982, 0.13267280161380768, 0.16308163106441498, 0.19757236540317535, 0.22254344820976257, 0.19030450284481049, 0.07358953356742859, -0.08945047855377197, -0.2487296462059021, -0.36155226826667786, -0.3997308909893036, -0.3699074685573578, -0.2948806583881378, -0.19681625068187714, -0.104521244764328, -0.037019602954387665, 0.006801048293709755, 0.03659011423587799, 0.058408331125974655, 0.07614041864871979, 0.09394621849060059, 0.10623814910650253, 0.10889388620853424, 0.10084006935358047, 0.07919341325759888, 0.05431981757283211, 0.037522319704294205, 0.027486631646752357, 0.021657312288880348, 0.01976192742586136, 0.02046734280884266, 0.022584812715649605, 0.03187425434589386, 0.048160210251808167, 0.0695548728108406, 0.0948593020439148, 0.1203475147485733, 0.14019672572612762, 0.1560186743736267, 0.17949643731117249, 0.19141817092895508, 0.14069664478302002, 0.014065705239772797, -0.14725030958652496, -0.2964656949043274, -0.389629602432251, -0.40035563707351685, -0.342044472694397, -0.24951229989528656, -0.1520925611257553, -0.07078331708908081, -0.014483164995908737, 0.02218332327902317, 0.047621071338653564, 0.06660117954015732, 0.08283667266368866, 0.09694867581129074, 0.10216330736875534, 0.09954482316970825, 0.09156288951635361, 0.07619567960500717, 0.05748068541288376, 0.04184204712510109, 0.03355040401220322, 0.030889680609107018, 0.029599172994494438, 0.030203336849808693, 0.03177696466445923, 0.03803461045026779, 0.05156323313713074, 0.06700876355171204, 0.07955492287874222, 0.0889742523431778, 0.0995139330625534, 0.11195284128189087, 0.13313919305801392, 0.14719849824905396, 0.10942958295345306, 0.008235778659582138, -0.12659868597984314, -0.254869282245636, -0.33510056138038635, -0.3445962369441986, -0.29521527886390686, -0.21606601774692535, -0.13482452929019928, -0.06960994005203247, -0.024336418136954308, 0.00730836670845747, 0.03557458147406578, 0.06174015998840332, 0.08048205822706223, 0.09057596325874329, 0.09366646409034729, 0.09482108056545258, 0.08927062153816223, 0.0737944096326828, 0.052283529192209244, 0.038274798542261124, 0.03800288960337639, 0.04191477969288826, 0.04738563299179077, 0.049174610525369644, 0.04447738826274872, 0.03907915949821472, 0.03667116165161133, 0.037404123693704605, 0.04293988645076752, 0.053365591913461685, 0.07015983760356903, 0.09523802250623703, 0.1279396265745163, 0.13978374004364014, 0.09451998770236969, -0.006230326369404793, -0.13268670439720154, -0.24296680092811584, -0.3036602735519409, -0.3054460287094116, -0.26278573274612427, -0.1963275969028473, -0.12600837647914886, -0.06559799611568451, -0.016364917159080505, 0.025168120861053467, 0.05780204385519028, 0.08181775361299515, 0.09730692207813263, 0.10261006653308868, 0.10138534754514694, 0.09391133487224579, 0.0812135860323906, 0.06495735794305801, 0.04452745243906975, 0.030209172517061234, 0.02521292120218277, 0.024246616289019585, 0.028514383360743523, 0.03297986462712288, 0.03234204649925232, 0.029065217822790146, 0.02734295092523098, 0.028356101363897324, 0.03358234465122223, 0.04638802260160446, 0.07362000644207001, 0.11598476022481918, 0.15154863893985748, 0.13651466369628906, 0.0500800758600235, -0.0833551436662674, -0.21598418056964874, -0.30180659890174866, -0.3207055926322937, -0.28030142188072205, -0.20602759718894958, -0.12330596148967743, -0.05184589698910713, 0.0024600946344435215, 0.041990235447883606, 0.07008791714906693, 0.08918200433254242, 0.09788858145475388, 0.09925957024097443, 0.09736611694097519, 0.09354724735021591, 0.08233185857534409, 0.06179523468017578, 0.03587280586361885, 0.01550816185772419, 0.007870186120271683, 0.008158452808856964, 0.015716176480054855, 0.02164607122540474, 0.021352574229240417, 0.021242542192339897, 0.02372588962316513, 0.03095494583249092, 0.04055992513895035, 0.054846905171871185, 0.08525209128856659, 0.1349332630634308, 0.17532047629356384, 0.1469796895980835, 0.030354559421539307, -0.13001704216003418, -0.2704525887966156, -0.34206676483154297, -0.3319365382194519, -0.260400652885437, -0.16497273743152618, -0.07712336629629135, -0.011708144098520279, 0.029232097789645195, 0.05236589163541794, 0.06944732367992401, 0.08706852793693542, 0.09754069149494171, 0.096845343708992, 0.08912178128957748, 0.07487475872039795, 0.05617770180106163, 0.03399546071887016, 0.021377965807914734, 0.023993948474526405, 0.02924390509724617, 0.030826129019260406, 0.026514187455177307, 0.015791788697242737, 0.005420871078968048, 0.002318866550922394, 0.008646843954920769, 0.025109287351369858, 0.0520012192428112, 0.09103597700595856, 0.14125142991542816, 0.20307081937789917, 0.229076087474823, 0.15167474746704102, -0.019956856966018677, -0.21879589557647705, -0.3713948726654053, -0.4238629639148712, -0.3680734634399414, -0.24297429621219635, -0.11205701529979706, -0.02036176435649395, 0.024492187425494194, 0.038234077394008636, 0.04559215158224106, 0.05913134664297104, 0.0781807154417038, 0.0946720540523529, 0.10546226799488068, 0.10394863039255142, 0.08679071068763733, 0.05838283896446228, 0.030488861724734306, 0.014792046509683132, 0.017219610512256622, 0.03236361965537071, 0.0406595803797245, 0.035577110946178436, 0.017032185569405556, -0.0042541660368442535, -0.014247165992856026, -0.0063460227102041245, 0.01910657063126564, 0.05869069695472717, 0.10494290292263031, 0.161939337849617, 0.24337653815746307, 0.29600030183792114, 0.22066661715507507, 0.014680922031402588, -0.23523205518722534, -0.4346300959587097, -0.5096334218978882, -0.44522392749786377, -0.28916800022125244, -0.12374954670667648, -0.010195167735219002, 0.03793333098292351, 0.038200121372938156, 0.02915928326547146, 0.03878701478242874, 0.06722381711006165, 0.09941745549440384, 0.12094743549823761, 0.12745465338230133, 0.11381369084119797, 0.08417129516601562, 0.050983913242816925, 0.03021516650915146, 0.02183159999549389, 0.021595999598503113, 0.02087421342730522, 0.009698987007141113, -0.0038809534162282944, -0.009729268960654736, -0.005846002139151096, 0.005765731446444988, 0.03077908605337143, 0.06528857350349426, 0.10007761418819427, 0.12836135923862457, 0.16878516972064972, 0.24651320278644562, 0.2833552360534668, 0.172173872590065, -0.05759966000914574, -0.3048069477081299, -0.4766943156719208, -0.5115728974342346, -0.4141440689563751, -0.25148361921310425, -0.09816746413707733, 0.002454613335430622, 0.03837745636701584, 0.030923940241336823, 0.02315332368016243, 0.03964530676603317, 0.07314550131559372, 0.11105514317750931, 0.14054493606090546, 0.14426353573799133, 0.11963841319084167, 0.08217216283082962, 0.05224965885281563, 0.03566357120871544, 0.024556567892432213, 0.01639825664460659, 0.0027124076150357723, -0.012405714951455593, -0.01521933451294899, -0.0032444270327687263, 0.013852527365088463, 0.03169747814536095, 0.05001797154545784, 0.06739602237939835, 0.07868468016386032, 0.08960369229316711, 0.12363915145397186, 0.20666030049324036, 0.2681480646133423, 0.1894986778497696, -0.01716972328722477, -0.2605535686016083, -0.44391852617263794, -0.497549444437027, -0.4166542887687683, -0.2616412937641144, -0.10617705434560776, 0.00010760233999462798, 0.04105251654982567, 0.039718035608530045, 0.03500722721219063, 0.04740802198648453, 0.0716128945350647, 0.10070189088582993, 0.12611651420593262, 0.13285116851329803, 0.11576124280691147, 0.08248406648635864, 0.04956881329417229, 0.026111334562301636, 0.01443873718380928, 0.010885709896683693, 0.007853563874959946, 0.007023447193205357, 0.006941073574125767, 0.008216068148612976, 0.010858931578695774, 0.014558093622326851, 0.022204257547855377, 0.03670912981033325, 0.05455712229013443, 0.0796266719698906, 0.14095129072666168, 0.23378387093544006, 0.2648313641548157, 0.15624701976776123, -0.05912107229232788, -0.29170694947242737, -0.44610992074012756, -0.4633045494556427, -0.36163026094436646, -0.21081198751926422, -0.07626289129257202, 0.010588707402348518, 0.04690994322299957, 0.05488717928528786, 0.06405046582221985, 0.08021804690361023, 0.09261811524629593, 0.09965639561414719, 0.10229533910751343, 0.09486600756645203, 0.07734646648168564, 0.052489958703517914, 0.028684180229902267, 0.012773152440786362, 0.007839933037757874, 0.0106290802359581, 0.009211239404976368, 0.008839895948767662, 0.01191722508519888, 0.01017827820032835, 0.009349551983177662, 0.01643124781548977, 0.03194098919630051, 0.05532427132129669, 0.08624707907438278, 0.13661153614521027, 0.21107324957847595, 0.24522750079631805, 0.16243483126163483, -0.021369455382227898, -0.23017771542072296, -0.3840201199054718, -0.4289357662200928, -0.36128586530685425, -0.2323330044746399, -0.10718747973442078, -0.01631532981991768, 0.0340607687830925, 0.05514167994260788, 0.06857068091630936, 0.08641838282346725, 0.09971685707569122, 0.10016104578971863, 0.09114039689302444, 0.0744144469499588, 0.05553457885980606, 0.038543153554201126, 0.026509879156947136, 0.019281864166259766, 0.01010201871395111, 0.003188975155353546, 0.0002468712627887726, -0.0030174683779478073, 0.0005083158612251282, 0.012157551012933254, 0.02620021253824234, 0.0390666201710701, 0.05372661352157593, 0.07673763483762741, 0.10581677407026291, 0.14919038116931915, 0.2072824239730835, 0.22173571586608887, 0.12686775624752045, -0.058159954845905304, -0.25124865770339966, -0.3807341456413269, -0.4054058790206909, -0.33478236198425293, -0.21714895963668823, -0.10048331320285797, -0.014835906215012074, 0.0315135158598423, 0.050550635904073715, 0.06045863404870033, 0.07100800424814224, 0.08278582990169525, 0.0867357850074768, 0.08282183855772018, 0.07658128440380096, 0.06951700150966644, 0.05991934984922409, 0.04606622830033302, 0.031818218529224396, 0.017879188060760498, 0.004361338913440704, -0.003458969295024872, -0.005383633077144623, -0.0034844279289245605, 0.003658916801214218, 0.013585575856268406, 0.026994163170456886, 0.047346945852041245, 0.07338082790374756, 0.10748519003391266, 0.1654706448316574, 0.24320116639137268, 0.26245707273483276, 0.1520615518093109, -0.05869787558913231, -0.2761608362197876, -0.4135068655014038, -0.42781662940979004, -0.3370453119277954, -0.20744158327579498, -0.0901639312505722, -0.012209353968501091, 0.01638631522655487, 0.020375803112983704, 0.02842438779771328, 0.047421038150787354, 0.0691489428281784, 0.084945447742939, 0.08960103988647461, 0.08591814339160919, 0.08195380866527557, 0.07658098638057709, 0.07171108573675156, 0.057304516434669495, 0.037137046456336975, 0.020842410624027252, 0.0045942217111587524, -0.006855927407741547, -0.009180314838886261, -0.004630684852600098, -0.0038739116862416267, -0.0045129721984267235, 0.006305869203060865, 0.03656712919473648, 0.0802319273352623, 0.13738040626049042, 0.23426130414009094, 0.3217848241329193, 0.2707386314868927, 0.06559279561042786, -0.1918872445821762, -0.3978506624698639, -0.48028022050857544, -0.42002132534980774, -0.27226391434669495, -0.12397995591163635, -0.02253502421081066, 0.016902947798371315, 0.009644731879234314, -0.003633027896285057, 0.00931241363286972, 0.04739725589752197, 0.0845571756362915, 0.10728130489587784, 0.11560563743114471, 0.1063816100358963, 0.08336281776428223, 0.06193206086754799, 0.05103356018662453, 0.039100050926208496, 0.02504781261086464, 0.016459710896015167, 0.0011405888944864273, -0.010896151885390282, -0.006365768611431122, -6.06919638812542e-06, -0.0027231848798692226, -0.008213811554014683, 0.005509030539542437, 0.04224596545100212, 0.0951128751039505, 0.16549140214920044, 0.2740027904510498, 0.34728682041168213, 0.2500289976596832, 0.013120058923959732, -0.24776259064674377, -0.4392651319503784, -0.49773094058036804, -0.4125138223171234, -0.24824340641498566, -0.10044561326503754, -0.010087519884109497, 0.01993710920214653, 0.012190650217235088, 0.0062577491626143456, 0.028918251395225525, 0.07237915694713593, 0.10856851935386658, 0.12629903852939606, 0.12321209907531738, 0.09655318409204483, 0.059145890176296234, 0.03224131464958191, 0.024596355855464935, 0.017473917454481125, 0.007108460180461407, 0.00015069986693561077, -0.009397262707352638, -0.011644581332802773, -0.0036653541028499603, 0.00556532759219408, 0.009159060195088387, 0.013214431703090668, 0.029884524643421173, 0.06371346861124039, 0.10834424197673798, 0.1710115671157837, 0.28029876947402954, 0.341418981552124, 0.22563423216342926, -0.01891881227493286, -0.27547934651374817, -0.4570824205875397, -0.4979320764541626, -0.39580339193344116, -0.2331790030002594, -0.09401627629995346, -0.006506999488919973, 0.028631340712308884, 0.029755011200904846, 0.034267112612724304, 0.059404157102108, 0.09216393530368805};
    auto arr_y = nc::NDArrayPtr<double>::FromVec1D(vec_y);
    auto arr_stft_matrix = rosacxx::core::stft(arr_y, n_fft, hop_length).T();
    // std::cout << arr_stft_matrix << std::endl;
    std::vector<std::vector<double>> vec2d_x = {
        {0.01681092008948326, 0.0, -0.007112395949661732, 0.0, 0.0005031544133089483, 0.0, -0.0012743070255964994, 0.0, -0.002810526406392455, 0.0, 0.00836125761270523, 0.0, -0.003671163460239768, 0.0, 0.0030840912368148565, 0.0, -1.0638015270233154, 0.0},
        {-0.023890838027000427, 1.0083080204115191e-17, 0.0046365163289010525, 0.011498929932713509, 0.00968290027230978, -0.008728683926165104, -0.012031625024974346, -0.003054228378459811, -0.0012758446391671896, 0.0028218128718435764, 0.010283024981617928, -0.003323513548821211, -0.006293610204011202, -0.0005236055003479123, 0.0034053181298077106, 0.003184049855917692, 1.0953632593154907, 0.0276738703250885},
        {0.013394517824053764, 4.40378509055013e-18, 0.01029942836612463, -0.005389055702835321, -0.003287138883024454, 0.014488003216683865, -0.006869459059089422, 0.0005145370378158987, -0.008380945771932602, 0.007996675558388233, 0.011842479929327965, -0.00872192531824112, -0.009994657710194588, 0.0007718700217083097, 0.008532918058335781, 0.004692739807069302, -1.147232174873352, -0.056874800473451614},
        {0.04548719897866249, -5.204170427930421e-17, 0.0030836984515190125, 0.01048264093697071, 0.03972191363573074, -0.01640055701136589, -0.014652024954557419, -0.008857030421495438, -0.004237305838614702, 0.023069730028510094, 0.02634432539343834, -0.004161132499575615, -0.007287160027772188, -0.012200933881103992, 0.0015769925666972995, 0.01355121098458767, 1.3090291023254395, 0.10008682310581207},
        {-0.09760602563619614, 1.5612511283791264e-17, -0.011775760911405087, -0.0011787657858803868, -0.03621853142976761, 0.028784295544028282, -0.06984426826238632, -0.07513254880905151, -0.013795366510748863, 0.024366840720176697, 0.052370429039001465, -0.05593514069914818, -0.03783636912703514, -0.0009914764668792486, 0.038636866956949234, 0.0384376123547554, -1.5120198726654053, -0.1504809409379959},
        {0.030044682323932648, -2.992397996059992e-17, -0.16184256970882416, 0.1739668846130371, -0.08122679591178894, 0.03954322263598442, -0.27858132123947144, -0.04439204931259155, -0.11739909648895264, -0.04566704481840134, 0.21938349306583405, -0.25203514099121094, 0.036509621888399124, -0.13169996440410614, 0.21848227083683014, 0.08261402696371078, 2.460326910018921, 0.3256898522377014},
        {0.4380456805229187, 2.1405130554866396e-18, -0.5911183953285217, -0.3950308561325073, 1.6755801439285278, 0.25415486097335815, -0.2639218866825104, -1.5262726545333862, -0.1760152280330658, 2.6673905849456787, 1.5049288272857666, -0.4764302372932434, -2.473060131072998, -0.31013593077659607, 0.9160295128822327, 1.632354736328125, -4.5991926193237305, -0.713813066482544},
        {-0.2640276551246643, 9.627715291671279e-17, 1.9090709686279297, -0.2823258638381958, -3.3303048610687256, -0.285969614982605, 3.424625873565674, 4.155498504638672, 1.3759093284606934, -6.994844913482666, -5.224414825439453, 2.546210289001465, 6.031371116638184, 1.4707584381103516, -3.25858736038208, -4.561681270599365, 2.498060941696167, 0.34858736395835876},
        {-0.6914922595024109, -6.517979326896864e-18, -1.3806016445159912, 0.7014632821083069, 1.5725477933883667, -0.24200740456581116, -3.934556722640991, -2.603466272354126, -1.5065785646438599, 4.906142711639404, 3.883260726928711, -1.994753360748291, -3.853973627090454, -1.2462302446365356, 2.366414785385132, 3.230419158935547, 2.114438056945801, 0.45248937606811523},
        {0.5941454172134399, -1.474514954580286e-17, 0.16021038591861725, -0.22184106707572937, 0.2516568601131439, 0.18371854722499847, 1.0273692607879639, -0.039303891360759735, 0.3484649360179901, -0.33401212096214294, -0.26992902159690857, 0.15641357004642487, 0.252277135848999, 0.23376984894275665, -0.28809207677841187, -0.34080445766448975, -2.0529515743255615, -0.42732885479927063},
        {0.02981412597000599, -1.002808427390899e-17, 0.03079807758331299, 0.03222121298313141, -0.05934017896652222, 0.04390610009431839, 0.08208496123552322, 0.18107256293296814, 0.07989896833896637, -0.25568392872810364, -0.13413764536380768, -0.03585118055343628, 0.0695037916302681, 0.03599946200847626, 0.0007541372906416655, 0.02812759019434452, 0.5381563901901245, 0.12960584461688995},
        {-0.4111468195915222, 1.3444106938820255e-17, -0.06387531757354736, 0.025656796991825104, -0.008602693676948547, 0.014394935220479965, 0.0005560333956964314, 0.05025447905063629, -0.03911967575550079, -0.03806368261575699, -0.004777972120791674, -0.0774141475558281, 0.09389140456914902, -0.004973818548023701, -0.022505564615130424, 0.0939207598567009, -0.2837832272052765, -0.07717335969209671},
        {0.725176990032196, -4.163336342344337e-17, 0.16002199053764343, 0.023824483156204224, -0.04923716560006142, 0.21085922420024872, -0.07391209155321121, 0.20787754654884338, 0.0900883898139, -0.3312281668186188, 0.19269883632659912, -0.4507424831390381, -0.18247592449188232, 0.3846740424633026, 0.12392153590917587, 0.2420278936624527, -0.568888783454895, -0.19417481124401093},
        {-0.6478446125984192, 2.3852447794681098e-17, -0.02103675901889801, 0.059150733053684235, -0.3478536307811737, -0.2530449628829956, -2.139010190963745, -0.44699588418006897, -2.65818452835083, -0.4241158366203308, 0.8572523593902588, 0.13172398507595062, 3.02182674407959, 0.27216848731040955, -1.0680838823318481, 1.3489214181900024, -0.8376785516738892, -0.3373676836490631},
        {-0.3205486238002777, -2.4732576238243645e-17, 0.3404999375343323, -0.1963893622159958, 0.2509540021419525, -0.4007546603679657, 4.954239845275879, -2.2014758586883545, 7.199769496917725, 3.335310220718384, -3.7008817195892334, 5.312422275543213, -8.640621185302734, -3.074343681335449, 2.509816884994507, -7.608651161193848, 7.695021152496338, 2.8828301429748535},
        {1.3227880001068115, -2.0816681711721685e-17, -0.72038334608078, -0.40826863050460815, 0.3270433843135834, 0.3672567307949066, -2.476046562194824, 4.129383087158203, -5.115089416503906, -3.3020787239074707, 3.4723658561706543, -7.137716293334961, 6.985505104064941, 2.760906219482422, -2.339160680770874, 7.4080376625061035, -9.401981353759766, -3.5442206859588623},
        {-0.514535129070282, 7.28583859910259e-17, 0.22442752122879028, 0.8371767401695251, -0.25772619247436523, 0.02987334318459034, -0.5018730163574219, -1.7609643936157227, -0.16152408719062805, 0.6752055287361145, -0.9177629947662354, 2.1678643226623535, -0.712497889995575, -0.07407519966363907, 0.9073136448860168, -1.1124829053878784, 4.03607702255249, 1.6036063432693481},
        {-0.6150460839271545, 8.326672684688674e-17, 0.10887160152196884, -0.31979650259017944, 0.12379961460828781, 0.08750216662883759, 0.17242327332496643, 0.04822106659412384, 0.6071189641952515, 0.004499527160078287, 0.10788510739803314, 0.10190672427415848, -0.4451751708984375, -0.24328497052192688, -0.1979280412197113, -0.3887178897857666, -1.8520523309707642, -0.8277180194854736},
        {0.4316784143447876, -2.037023413715334e-17, 0.07535924017429352, -0.10018829256296158, 0.0442347414791584, -0.1177719235420227, 0.1359933614730835, 0.07735569775104523, 0.08043534308671951, 0.02864941954612732, -0.02400035783648491, -0.04198078811168671, -0.03410746529698372, -0.06402202695608139, -0.05214618891477585, -0.032640378922224045, 1.9257175922393799, 0.9066882133483887},
        {0.03090727888047695, 8.239936510889834e-18, -0.04416828602552414, -0.06053370609879494, -0.10364393889904022, 0.13272792100906372, 0.11589045077562332, 0.08871862292289734, -0.013008377514779568, 0.1380830556154251, 0.07020116597414017, -0.10600218176841736, 0.07047051191329956, -0.007315433584153652, -0.2734295129776001, 0.08021090924739838, -2.435455083847046, -1.2467455863952637},
        {-0.1405055671930313, 3.122502256758253e-17, 0.07620616257190704, 0.13829326629638672, -0.4839523732662201, -0.04743780195713043, -0.4280712604522705, 0.13191485404968262, 0.9657940864562988, -0.8185847401618958, 0.36450308561325073, 0.8423161506652832, -1.2038893699645996, -1.226984977722168, 0.4513222575187683, -0.906089186668396, 4.495482444763184, 2.4481019973754883},
        {-0.18085309863090515, 1.0842021724855044e-17, -0.41082385182380676, 0.12302542477846146, 0.6558437943458557, -0.385743647813797, -0.8870547413825989, -1.8104441165924072, -3.4593863487243652, 1.8184046745300293, -2.0570743083953857, 1.7817133665084839, 2.996983766555786, 5.034000873565674, 3.715026617050171, 1.6679937839508057, -2.927661418914795, -1.5618113279342651},
        {0.45198604464530945, -2.7268470459592362e-17, 0.5117897987365723, -0.22078722715377808, 0.18554021418094635, 0.4904758036136627, 2.5191309452056885, 1.946435809135437, 3.14009165763855, -1.3015588521957397, 2.336512327194214, -5.219973564147949, -2.576667547225952, -4.82625150680542, -6.351867198944092, -1.6424795389175415, -2.556412696838379, -1.6155518293380737},
        {0.006755093578249216, -2.42861286636753e-17, -0.05826566740870476, 0.15757055580615997, -0.3169873058795929, -0.06758363544940948, -1.5096689462661743, -0.3426451086997986, -0.1926315426826477, -0.15868106484413147, -0.6835699081420898, 3.3687374591827393, 0.49140411615371704, 0.1303512156009674, 2.474898338317871, 1.0177077054977417, 3.4267914295196533, 2.114611864089966},
        {-0.5955686569213867, -2.386521450025524e-17, -0.3060970604419708, -0.26192614436149597, -0.026189744472503662, -0.1246834248304367, 0.1861346811056137, -0.11189281940460205, -0.33554649353027344, 0.31532952189445496, -0.08790616691112518, -0.5996723175048828, 0.04723300784826279, 0.8120797276496887, 0.027397366240620613, -0.30324986577033997, -1.5856878757476807, -1.0531117916107178},
        {0.46338731050491333, -3.382710778154774e-17, 0.08579568564891815, 0.1300954967737198, -0.13884948194026947, 0.0439947135746479, 0.020727936178445816, -0.024994654580950737, -0.02570222318172455, 0.038274165242910385, 0.046941742300987244, 0.045781396329402924, 0.056145720183849335, 0.05963142216205597, 0.007651374209672213, -0.032803867012262344, 1.307163119316101, 0.917940616607666},
        {0.03396576642990112, 1.3688838249211419e-17, 0.09119564294815063, 0.07021661102771759, 0.1693105697631836, 0.13111728429794312, 0.02808305062353611, -0.005287866573780775, -0.13498780131340027, -0.004264285787940025, 0.18243081867694855, -0.0049062869511544704, -0.13418781757354736, -0.11006928235292435, 0.11278170347213745, -0.05878360942006111, -1.1407558917999268, -0.8432902097702026},
        {-0.3058772683143616, 2.5587171270657905e-17, -0.00884714163839817, -0.002106286818161607, -0.06671813130378723, -0.2751545011997223, 0.049305666238069534, 0.39888060092926025, 0.10488080233335495, 0.44573530554771423, -0.2764878571033478, 0.9171721339225769, 0.429002583026886, 1.3542052507400513, 0.5001418590545654, 0.7468463182449341, 2.4668750762939453, 1.9823417663574219},
        {0.3498534858226776, -2.42861286636753e-17, 0.01799825392663479, 0.07231604307889938, 0.1137174442410469, 0.27333930134773254, -1.0688822269439697, -0.37509685754776, 0.6831212043762207, -1.9474828243255615, -1.2638200521469116, -0.16657012701034546, 0.5253688097000122, -4.464436054229736, -1.2466102838516235, 1.45292067527771, -5.06856632232666, -4.210066795349121},
        {-0.09616053849458694, -2.905661822261152e-17, 0.06825166940689087, -0.1592217981815338, -0.15031394362449646, -0.03460526093840599, 1.4781349897384644, -0.5828686356544495, -1.0316848754882812, 2.296027898788452, 2.39543080329895, -2.8285534381866455, -1.1801108121871948, 4.8916802406311035, 0.9823280572891235, -4.807501792907715, 3.6862666606903076, 3.0702521800994873},
        {-0.1807556301355362, -6.517979326896864e-18, -0.17164570093154907, 0.03722049295902252, -0.040741678327322006, -0.08571930229663849, -0.44317373633384705, 0.6411556005477905, 0.23720364272594452, -0.5255041718482971, -1.2419695854187012, 2.8324191570281982, -0.1553996503353119, -1.3107646703720093, -0.39908260107040405, 2.809171438217163, -0.1117907240986824, -0.058446403592824936},
        {0.055715546011924744, 1.973247953923618e-17, 0.05033234879374504, 0.03898555785417557, 0.04934925213456154, -0.009756697341799736, -0.10199940949678421, 0.014414479956030846, 0.06256333738565445, -0.18721595406532288, 0.21222659945487976, -0.8412394523620605, 0.6431134939193726, -0.2462666779756546, 0.051934365183115005, -0.14196297526359558, -0.24792902171611786, -0.20728154480457306},
        {0.11719860881567001, 2.369086633382499e-17, 0.06270045787096024, 0.02200423926115036, -0.0003273698966950178, -0.025600502267479897, 0.059348080307245255, -0.14418955147266388, -0.049573540687561035, -0.12417976558208466, -0.006480139214545488, 0.09625702351331711, -0.11419843137264252, -0.09601745009422302, 0.011461622081696987, 0.04970270395278931, -0.31701821088790894, -0.3142584264278412},
        {-0.05803029611706734, -8.023096076392733e-18, -0.04463539272546768, -0.035857751965522766, 0.07728151232004166, 0.05216990038752556, -0.012124369852244854, -0.006111615803092718, 0.11227235943078995, 0.01662278175354004, 0.037192344665527344, 0.15966548025608063, 0.09696313738822937, 0.19232124090194702, 0.1160576269030571, 0.05276021361351013, 0.4986356198787689, 0.5367422699928284},
        {-0.056853435933589935, -1.2563978495257708e-17, 0.01680172048509121, -0.012550147250294685, -0.02986227162182331, -0.027305608615279198, 0.10197378695011139, 0.13615404069423676, -0.26355448365211487, -0.011660891585052013, -0.14748530089855194, 0.2006356120109558, -0.11025787144899368, -0.8221873044967651, -0.4915236532688141, 0.31136423349380493, -0.976607620716095, -1.090908408164978},
        {0.13435783982276917, 1.691355389077387e-17, -0.008829711936414242, -0.020547285676002502, -0.045658789575099945, 0.06491749733686447, -0.27374589443206787, 0.21638375520706177, 0.4828684628009796, 0.5702178478240967, -0.5644643306732178, -0.130961075425148, -0.9240803122520447, 2.000540256500244, -0.33548805117607117, -0.8773759007453918, 0.04067740961909294, -0.021253393962979317},
        {-0.09457238763570786, 2.42861286636753e-17, -0.02451011724770069, 0.03348537161946297, -0.022595353424549103, -0.13812905550003052, 0.01963162049651146, -0.5462673902511597, -0.487747460603714, -0.9817504286766052, 0.9882922172546387, -1.3150837421417236, 1.920839548110962, -2.436962366104126, 2.4839065074920654, 0.35164105892181396, 1.8904509544372559, 2.3501453399658203},
        {-0.054865121841430664, 5.421010862427522e-17, -0.02027108334004879, 0.05634588003158569, 0.12457703799009323, 0.1232730969786644, 0.246768981218338, 0.21592779457569122, 0.2585116922855377, 0.40190356969833374, -0.30476370453834534, 1.491333246231079, -0.7786540985107422, 1.172094464302063, -2.068894624710083, -0.04411749169230461, -1.7744084596633911, -2.218651294708252},
        {0.0023155228700488806, -1.8242487373650537e-17, 0.15082748234272003, -0.13390539586544037, -0.11649030447006226, 0.029795031994581223, -0.21119670569896698, -0.04700680449604988, 0.006683371029794216, 0.020783374086022377, -0.06085372343659401, -0.3980265259742737, -0.2671085298061371, -0.05136861279606819, 0.323351114988327, 0.21053948998451233, 0.7012284994125366, 0.9333962202072144},
        {0.10744352638721466, -6.678685382510707e-17, -0.20443347096443176, 0.08613253384828568, 0.032756030559539795, -0.12916123867034912, 0.1037309467792511, 0.11612556129693985, -0.03630761802196503, 0.019704757258296013, 0.008743995800614357, 0.05171665549278259, 0.05321505665779114, -0.02016386017203331, 0.012314178980886936, -0.05093681812286377, -0.49478018283843994, -0.7018925547599792},
        {0.017506413161754608, -7.67487487607608e-17, 0.14442940056324005, 0.00036437404924072325, 0.020420268177986145, 0.07261329144239426, 0.02096116542816162, -0.054184023290872574, -0.03006465919315815, 0.023488178849220276, 0.015425577759742737, 0.010902164503932, 0.022805215790867805, -0.0010418000165373087, 0.00021242517686914653, -0.026788080111145973, 0.42740702629089355, 0.6362478733062744},
        {-0.09297922253608704, 8.673617379884035e-18, -0.06725608557462692, 0.012223752215504646, 0.009650345891714096, -0.010229303501546383, 0.006475120782852173, 0.03332085907459259, 0.13125361502170563, -0.010566433891654015, -0.10540446639060974, 0.06353223323822021, -0.13982422649860382, 0.056250959634780884, -0.11134646087884903, -0.05488662049174309, -0.4760807752609253, -0.7613916397094727},
        {0.07882453501224518, -1.0895446011897394e-17, 0.02034417726099491, -0.034942395985126495, -0.041340794414281845, -0.012662021443247795, -0.020657557994127274, 0.08193954825401306, -0.29303550720214844, -0.18708102405071259, -0.060476839542388916, -0.2130511850118637, 0.6962296366691589, -0.07900984585285187, 0.3086089789867401, -0.010870886035263538, 0.6258655190467834, 1.0496971607208252},
        {-0.06869834661483765, -3.5128150388530344e-17, 0.01648499071598053, 0.05124938488006592, 0.04479142650961876, -0.00624594883993268, -0.19145649671554565, -0.1666366308927536, 0.36917033791542053, 0.34820306301116943, 0.4810529947280884, -0.2141319066286087, -1.1209986209869385, -0.09491965919733047, -0.17995409667491913, 0.6823889017105103, -0.3385312259197235, -0.5637272000312805},
        {-0.0075079575181007385, -6.938893903907228e-18, -0.034254468977451324, -0.06752518564462662, 0.007040932308882475, 0.011207287199795246, 0.26493194699287415, 0.04579862952232361, -0.20123110711574554, -0.0995296910405159, -0.4908803105354309, 0.5883282423019409, 0.5691071152687073, -0.008791008964180946, 0.0952533707022667, -0.8326422572135925, -0.09231597185134888, -0.18214987218379974},
        {0.12284474074840546, 1.3010426069826053e-18, 0.06292057037353516, 0.0032339903991669416, -0.05791394039988518, -0.023917673155665398, -0.1616325080394745, 0.024672485888004303, 0.005158265121281147, -0.05796322971582413, 0.17831677198410034, -0.28628256916999817, 0.06956396996974945, 0.18158358335494995, -0.12473221868276596, 0.22558800876140594, 0.08522069454193115, 0.15807434916496277},
        {-0.17008349299430847, -7.385341478475574e-18, -0.08111993223428726, -0.0021104668267071247, 0.05880708619952202, 0.043380264192819595, 0.10061175376176834, -0.010444851592183113, 0.009549717418849468, 0.00814385898411274, -0.0516287200152874, 0.019626978784799576, -0.05175396427512169, -0.07199091464281082, 0.029169118031859398, 0.009306242689490318, -0.015748921781778336, -0.03710813820362091},
        {0.062412332743406296, 5.551115123125783e-17, 0.028411800041794777, 0.045470498502254486, -0.03171447664499283, -0.017992673441767693, -0.031223954632878304, 0.008899482898414135, -0.00624576210975647, -0.04076517000794411, -0.007468400988727808, 0.041452713310718536, -0.039099305868148804, 0.0029151628259569407, -0.0037201400846242905, -0.004456241149455309, 0.03061729669570923, 0.0670817419886589},
        {0.062434177845716476, 4.5102810375396984e-17, 0.006216968409717083, -0.011952881701290607, -0.003658083500340581, 0.022665923461318016, 0.002223421586677432, -0.035153042525053024, 0.006946330424398184, 0.0399467870593071, 0.007333611603826284, -0.08661645650863647, 0.1209569126367569, 0.05230844020843506, 0.05199110135436058, 0.010932812467217445, -0.037809498608112335, -0.09522706270217896},
        {-0.09821727871894836, -1.1796119636642288e-16, 0.003991205245256424, 0.005489205941557884, 0.008326762355864048, -0.03486824408173561, 0.017382511869072914, 0.08526495844125748, 0.0457780621945858, 0.009123280644416809, 0.0592491589486599, 0.016470856964588165, -0.18118678033351898, -0.23954232037067413, -0.11649957299232483, 0.10841162502765656, 0.13110503554344177, 0.35446879267692566},
        {0.0885004773736, -5.506470531105071e-17, 0.002194163855165243, -0.0037766785826534033, 0.0023208276834338903, 0.02346726320683956, -0.09577199071645737, -0.05481408163905144, -0.08305799961090088, -0.11151127517223358, 0.09027611464262009, 0.06782660633325577, 0.10086642950773239, 0.40798893570899963, -0.07464150339365005, -0.2616996765136719, -0.15585575997829437, -0.42547038197517395},
        {-0.05560524761676788, 3.859759734048396e-17, -0.003923914860934019, -0.010894669219851494, -0.013347242958843708, -0.001390452729538083, 0.09934180974960327, -0.023363249376416206, 0.043356627225875854, 0.08856061100959778, -0.22384454309940338, -0.020387694239616394, -0.06045176088809967, -0.27911609411239624, 0.24772605299949646, 0.26743564009666443, 0.03227381035685539, 0.07984177768230438},
        {0.01679777354001999, 6.245004513516506e-17, 0.005683832801878452, 0.00947680976241827, 0.011703205294907093, -0.01636861078441143, -0.031375180929899216, 0.03125292807817459, 0.019316570833325386, 0.00021662659128196537, 0.11483747512102127, 0.01606561988592148, 0.05329861119389534, 0.023204993456602097, -0.08637454360723495, -0.16175884008407593, 0.029668617993593216, 0.09413241595029831},
        {0.024019606411457062, -9.974659986866641e-18, -0.00841369666159153, -0.023931263014674187, -0.009222621098160744, 0.016671329736709595, 0.006461862940341234, -0.014791436493396759, -0.021457845345139503, 0.014223827049136162, -0.027141274884343147, -0.03984938561916351, -0.0006428037886507809, 0.024816876277327538, -0.003826493863016367, 0.052217017859220505, -0.022172508761286736, -0.08293060213327408},
        {-0.043317604809999466, 2.217114860574664e-17, 0.004002806730568409, 0.019601672887802124, 0.008827602490782738, -0.006379546597599983, -0.005310089327394962, 0.00491225253790617, 0.005060164723545313, -0.01409988570958376, -0.0034736832603812218, 0.010009943507611752, -0.002856617793440819, 0.007090933620929718, -0.0004822890623472631, -0.0004739904834423214, 0.026059981435537338, 0.10301956534385681},
        {0.043715376406908035, -2.688821387764051e-17, 0.0003422160807531327, -0.009205610491335392, 0.0008980926359072328, -0.003610648913308978, 0.015641503036022186, -0.010125056840479374, 0.00816697534173727, -0.010061550885438919, 0.03820669278502464, -0.028836259618401527, 0.016584882512688637, -0.04641445726156235, -0.024876056239008904, -0.0029539435636252165, -0.021832318976521492, -0.09765564650297165},
        {-0.04425511509180069, -4.2054279241224654e-17, -0.0029414223972707987, 0.005250121466815472, -0.00781340803951025, 0.012218988500535488, -0.0014407825656235218, 0.03262706473469734, -0.05274942144751549, 0.004967529326677322, 0.018146755173802376, 0.0630929246544838, -0.1400107890367508, 0.08238106220960617, 0.04262467473745346, -0.07611851394176483, 0.04707932099699974, 0.25640973448753357},
        {0.0345664918422699, 1.474514954580286e-17, 0.0006682369275949895, 0.0020937337540090084, 0.006354506127536297, -0.011194632388651371, -0.046937838196754456, 0.002480802359059453, 0.08650694042444229, 0.049201007932424545, -0.046571217477321625, 0.03198365867137909, 0.29687079787254333, -0.023118585348129272, 0.10473434627056122, 0.07988766580820084, -0.07583572715520859, -0.4414069950580597},
        {-0.015352032147347927, -5.609960007440254e-18, -0.007729234639555216, -0.0031970315612852573, -0.005446502473205328, -0.005343503784388304, 0.03242429345846176, -0.052884191274642944, -0.05033988505601883, -0.04382021725177765, -0.08104250580072403, -0.11975746601819992, -0.23916582763195038, -0.013424006290733814, -0.2607938051223755, 0.03997917100787163, 0.04252633824944496, 0.2489420473575592},
        {-0.016575424000620842, -1.0842021724855044e-17, 0.006012673489749432, 0.007742405403405428, 0.015494298189878464, 0.016142144799232483, 0.020917555317282677, 0.03240792825818062, -0.006693052127957344, -0.02524731308221817, 0.10750238597393036, 0.07336042821407318, 0.03478143736720085, -0.018907979130744934, 0.14678837358951569, -0.0366390086710453, -0.0013476689346134663, -0.006966638844460249},
        {0.04773948714137077, -2.42861286636753e-17, -0.0043364884331822395, 0.004341999534517527, -0.025411183014512062, -0.01568037085235119, -0.0216827429831028, -0.006601337343454361, 0.004554548300802708, 0.031172461807727814, -0.036824148148298264, -0.03275349363684654, 0.02419460564851761, 0.010817685164511204, -0.01489332877099514, -0.004808291792869568, 0.001666945405304432, 0.02681403048336506},
        {-0.05399787053465843, -2.5153490401663703e-17, 0.005972190294414759, -0.009091611951589584, 0.010758659802377224, 0.00928516872227192, -0.004924786277115345, 0.006706110667437315, 0.01014072448015213, -0.014134365133941174, 0.022347601130604744, 0.01817885972559452, 0.009453974664211273, 0.003412962192669511, 0.008086874149739742, 0.001898245420306921, -0.004532693885266781, -0.059091173112392426},
        {0.0359397754073143, 7.847699044945764e-18, 0.0024222787469625473, -0.0003679621440824121, 0.015382357873022556, -0.007699604146182537, 0.009338158182799816, 0.0017004588153213263, -0.004250707570463419, 0.007054073736071587, -0.00359281781129539, 0.007761471439152956, -0.0503503791987896, -0.0039614527486264706, 0.008598282001912594, -0.014416346326470375, 0.0028952574357390404, 0.06573685258626938},
        {-0.0052814967930316925, 1.4094628242311558e-18, 0.0007463051006197929, -0.0034763405565172434, -0.023911505937576294, 0.011638322845101357, 0.007043156772851944, -0.0009501826134510338, 0.01372880581766367, 0.005998821463435888, -0.006617648992687464, 0.01854906976222992, 0.0798303559422493, 0.0447855144739151, -0.01533654984086752, 0.0621105320751667, -0.0019486492965370417, 0.009113887324929237},
        {-0.022201215848326683, 6.938893903907228e-18, -0.0025551961734890938, -0.006193749140948057, 0.022724315524101257, -0.006299726199358702, -0.02195221371948719, 0.010590167716145515, -0.0244715865701437, -0.032604023814201355, -0.0445275604724884, -0.02693033404648304, -0.03752763941884041, -0.12792128324508667, -0.05881640687584877, -0.037286918610334396, 0.0022208276204764843, -0.18805599212646484},
        {0.0337778739631176, -1.1817803680091998e-17, 0.0029974672943353653, 0.011398320086300373, -0.015299337916076183, -0.002546461531892419, 0.009085106663405895, -0.02926895022392273, 0.013156915083527565, 0.044426362961530685, 0.06063714995980263, -0.049831464886665344, -0.0046715461649000645, 0.13289961218833923, 0.1008773222565651, -0.08750061690807343, -0.001669408055022359, 0.17328214645385742},
        {-0.03941977396607399, -1.3051869472876185e-17, -0.0038785513024777174, -0.012178865261375904, 0.0056819310411810875, 0.01189232524484396, 0.007201041094958782, 0.011680269613862038, 0.0062727793119847775, -0.013139101676642895, -0.019589940086007118, 0.06919104605913162, -0.017449257895350456, -0.03658788278698921, -0.055722370743751526, 0.0830659344792366, -0.001033059903420508, -0.008668850176036358},
        {0.035329289734363556, -9.540979117872439e-18, 0.003003331832587719, 0.01018651481717825, 0.0013500502100214362, -0.02184797078371048, -0.002211006823927164, 0.00575180584564805, -0.0095882099121809, -0.0040341331623494625, 0.0026980112306773663, -0.026304658502340317, 0.021507058292627335, -0.007411313243210316, 0.011147438548505306, -0.009553813375532627, 0.0012655388563871384, -0.025550518184900284},
        {-0.01435982994735241, -3.469446951953614e-18, -0.0053222221322357655, 0.00496985437348485, -0.011917294934391975, 0.019064508378505707, -0.00408199243247509, -0.00413424102589488, 0.0013895243173465133, -0.0006965920911170542, 0.0020163787994533777, 0.006866953801363707, -0.002269503427669406, -0.00040503451600670815, -0.00121109071187675, 0.0004197673115413636, 7.05014172126539e-05, -0.0004859374894294888},
        {-0.005785562563687563, -2.0383000842727483e-17, -0.0006044444162398577, -0.001444213674403727, 0.01574692502617836, -0.003115669824182987, 0.010826420038938522, 0.003241951111704111, 0.009003596380352974, -0.0025037319865077734, -0.0048438794910907745, 0.008489014580845833, -0.004725489299744368, 0.013226227834820747, -0.01940448209643364, 0.006205189507454634, -0.003082120092585683, 0.02101481892168522},
        {0.019238466396927834, 5.609960007440254e-18, -0.0014180561993271112, -0.003954825457185507, -0.012674885801970959, -0.0076720998622477055, -0.004717914387583733, 0.004685124848037958, -0.02724197693169117, 6.584966467926279e-05, -0.01650880090892315, -0.018148286268115044, 0.028984352946281433, -0.030181480571627617, 0.021912403404712677, -0.06423428654670715, -0.008293536491692066, 0.0419032983481884},
        {-0.03225633502006531, 1.3010426069826053e-17, 0.003273061476647854, 0.0034664361737668514, 0.007674791384488344, 0.00513456342741847, -0.013943948782980442, -0.0019359420984983444, 0.03291148692369461, 0.017288096249103546, 0.016983820125460625, -0.014841536991298199, -0.08461619913578033, -0.00451702531427145, 0.042791638523340225, 0.05391725152730942, 0.04527053236961365, -0.24349626898765564},
        {0.04014620557427406, -1.3456873644394398e-17, -0.0002917624660767615, 0.0008221353637054563, 0.0006384917069226503, -0.004094548057764769, 0.0049061900936067104, -0.006434808950871229, -0.016618411988019943, -0.025668276473879814, 0.035473790019750595, 0.013507157564163208, 0.10300641506910324, 0.040839869529008865, -0.037965673953294754, 0.08296015858650208, -0.056519586592912674, 0.2930104732513428},
        {-0.032178424298763275, -2.862293735361732e-17, 0.002977307653054595, -0.005069071892648935, -0.007899311371147633, 0.005375147331506014, 0.010222461074590683, -0.004733203444629908, -0.0007243197760544717, 0.008116845041513443, -0.047723762691020966, 0.040137700736522675, -0.028484271839261055, -0.0031397962011396885, -0.00101351214107126, -0.1103803887963295, 0.029387997463345528, -0.140339195728302},
        {0.009595098905265331, 4.721779208768687e-17, 0.004069912247359753, -0.0023033705074340105, 0.011512737721204758, 0.0032396644819527864, -0.003936462104320526, 0.010895341634750366, 7.785655907355249e-05, 0.006411024369299412, 0.012675671838223934, -0.04587940871715546, -0.019317971542477608, -0.02684064581990242, -0.010197927244007587, 0.03231080248951912, -0.01749529130756855, 0.0686367005109787},
        {0.019912447780370712, -1.7780915628762273e-17, 0.0011157079134136438, 0.0007888990803621709, -0.008163964375853539, -0.009328299202024937, -0.0006914410041645169, -0.001852352754212916, 0.006545696407556534, -0.008835973218083382, -0.005167558789253235, 0.024322234094142914, 0.0007827247027307749, 0.01905512623488903, 0.011650558561086655, 0.0008264210191555321, 0.020215773954987526, -0.07364160567522049},
        {-0.04157333821058273, 4.85722573273506e-17, -0.006067116744816303, -0.004470304120332003, -0.006319331470876932, 0.008971037343144417, 0.009873851202428341, -0.006002455484122038, -0.007342218421399593, 0.008815565146505833, 0.001204473664984107, -0.012382433749735355, 0.009758413769304752, -0.015237088315188885, -0.006852426566183567, -0.013879235833883286, -0.021802950650453568, 0.07147043943405151},
        {0.040367595851421356, 1.691355389077387e-17, 0.0012701097875833511, 0.010851164348423481, 0.024528929963707924, -0.011961061507463455, -0.00972855743020773, 0.010379989631474018, 0.02054070681333542, 0.003008095547556877, 0.001344857970252633, -0.0013467964017763734, -0.02529100328683853, -0.008260669186711311, 0.019359707832336426, 0.0033116713166236877, 0.03388568386435509, -0.10049588978290558},
        {-0.022518783807754517, -2.8202021535836034e-17, -0.009720533154904842, -0.003433744190260768, -0.028518302366137505, 0.01203703973442316, -0.009307656437158585, -0.003559148870408535, -0.031430359929800034, -0.02814207598567009, 0.015221305191516876, -0.011385181918740273, 0.04737181216478348, 0.055305592715740204, -0.029130185022950172, 0.04268069192767143, -0.027551842853426933, 0.08046825230121613},
        {0.0017014463664963841, -1.0408340855860843e-16, 0.007093275897204876, 0.0016717355465516448, 0.014356168918311596, -0.007248196750879288, -0.0035249004140496254, -0.0038980559911578894, 0.021915767341852188, 0.037540070712566376, 0.007462077774107456, 0.022912729531526566, -0.04300032556056976, -0.07690627127885818, -0.01953636296093464, -0.0418124794960022, -0.009719565510749817, 0.02106408402323723},
        {0.014679179526865482, 1.0408340855860843e-17, -0.00215533166192472, -0.0014203437604010105, -0.0037978184409439564, -0.0009450918878428638, 0.02164369635283947, -0.004385451320558786, -0.005441807210445404, -0.013103391975164413, -0.03878670930862427, -0.0024191655684262514, 0.02528141252696514, 0.035186294466257095, 0.0501888170838356, 0.017218617722392082, 0.02494313381612301, -0.06134191155433655},
        {-0.025918075814843178, 5.551115123125783e-17, 0.0018758116057142615, 0.006085677072405815, 0.0026165021117776632, 0.00943268183618784, -0.009955331683158875, 0.008261413313448429, 0.001754922210238874, -0.006778914947062731, 0.027232667431235313, -0.0064699649810791016, -0.010530258528888226, 0.0034605779219418764, -0.019917359575629234, -0.02479875646531582, -0.01662004366517067, 0.03793499246239662},
        {0.02715720608830452, 7.385341478475574e-18, -0.0019948643166571856, -0.007578365039080381, 0.004590383730828762, -0.016298212110996246, 0.0019143050303682685, 0.0022060805931687355, -0.007497874554246664, 0.0030374617781490088, -0.0141256432980299, 0.0038003523368388414, 0.002917592879384756, 0.003538169665262103, -0.00016949084238149226, 0.01585153117775917, 0.011880539357662201, -0.025466132909059525},
        {-0.020207658410072327, -4.119968255444917e-17, 0.001884493394754827, -0.0013547190465033054, -0.015495061874389648, 0.015537478029727936, -0.006223680917173624, -0.010446010157465935, 0.0013928969856351614, -0.000319293380016461, 0.0036381524987518787, -0.0058744666166603565, -0.012183116748929024, -0.008696277625858784, 0.005582540761679411, 0.003610681276768446, -0.010394609533250332, 0.02059510350227356},
        {0.00884757749736309, 0.0, 0.008276599459350109, 0.00026512282784096897, 0.0181671641767025, -0.00525673758238554, 0.013859289698302746, 0.005578009877353907, 0.003352563828229904, 0.006492140237241983, 0.006657061167061329, -0.001358242705464363, 0.013989033177495003, 0.016658004373311996, -0.013994629494845867, 0.0007651406340301037, 0.025524836033582687, -0.046257130801677704},
        {0.00763699458912015, -6.5052130349130266e-18, -0.006838280241936445, 0.0013466720702126622, -0.012105440720915794, -0.00023625738685950637, -0.009135540574789047, 0.006182779558002949, 0.00836794450879097, -0.00338256754912436, 0.008791204541921616, 0.011012994684278965, 0.012018706649541855, -0.03137728571891785, 0.002048137364909053, -0.028956755995750427, -0.038977622985839844, 0.06892429292201996},
        {-0.019694004207849503, -1.686012960373152e-17, 0.001998627558350563, -0.0018213522853329778, 0.007196491118520498, -0.0002797003835439682, -0.003788769943639636, -0.004747449420392513, -0.01651117391884327, -0.01081535592675209, -0.015919534489512444, 0.004038725979626179, -0.03696326166391373, 0.02717585675418377, 0.027443330734968185, 0.010812612250447273, 0.0079684779047966, -0.016105489805340767},
        {0.02476569265127182, 1.9081958235744878e-17, -0.0028182079549878836, 0.0016513292212039232, -0.0034797540865838528, 0.0028062916826456785, 0.005320425610989332, -0.002593141747638583, 0.011919260956346989, 0.010996287688612938, -0.0033499491401016712, -0.018486453220248222, 0.023436693474650383, -0.013855568133294582, -0.02651543915271759, 0.02931434102356434, 0.028031375259160995, -0.04376206174492836},
        {-0.023582158610224724, -3.427355370175486e-17, -0.0007491883006878197, -0.0019954699091613293, -0.0022543661762028933, -0.0026079744566231966, 0.001147289527580142, -0.002608488081023097, -0.0038434406742453575, -0.001138941035605967, 0.005912775173783302, 0.013203451409935951, -0.0006902116001583636, 0.004973279777914286, 0.010920392349362373, -0.019701527431607246, -0.025921925902366638, 0.03948899731040001},
        {0.012806673534214497, -1.6479873021779667e-17, -0.001414559897966683, 0.0023073856718838215, 0.0021436368115246296, -0.0037666084244847298, -0.007226035464555025, 0.005631621927022934, 0.0003197552287019789, 0.002167146187275648, -0.0001763840118655935, -0.006327297538518906, -0.0003848450432997197, -0.0009673002641648054, -0.0024776665959507227, 0.0041968259029090405, 0.02022356167435646, -0.02856743149459362},
        {0.0035384437069296837, 4.7732788119617483e-17, 0.0019442312186583877, 0.0022647634614259005, 0.002131217857822776, 0.0050998954102396965, 0.005551459267735481, -0.0020931928884238005, -0.0009413778316229582, -0.005051376763731241, 0.005083385854959488, -0.0002306169772055, -0.0042173960246145725, 0.004851978737860918, -0.0018650999991223216, -0.003641798160970211, -0.02251615561544895, 0.030386079102754593},
        {-0.015518753789365292, 1.3010426069826053e-18, -0.0006486009224317968, -0.0004116113414056599, -0.0021380004473030567, -0.0012922683963552117, 0.0028784635942429304, -0.0007765653426758945, 0.004682435654103756, 0.0002824658586177975, -0.0018559261225163937, 0.0053152223117649555, 0.013394494540989399, -0.007751806173473597, 0.007709092926234007, -0.0013660188997164369, 0.030727317556738853, -0.038879603147506714},
        {0.019625814631581306, -2.42861286636753e-17, 0.001764086540788412, -0.0006588456453755498, 0.0023681886959820986, 0.001495719887316227, -0.005929287988692522, 0.004600154235959053, -0.010218572802841663, 0.00199987948872149, -0.005756451282650232, -0.0007705788593739271, -0.016913041472434998, -0.001162625034339726, -0.008754365146160126, 0.013808310963213444, -0.03900571167469025, 0.04754546284675598},
        {-0.018321096897125244, -3.0791341698588326e-17, 0.0004991773166693747, -0.0004240244161337614, -0.0038436606992036104, -0.0024481501895934343, 0.002160365227609873, -0.0028736311942338943, 0.008294252678751945, 0.0003905407793354243, -0.0026752131525427103, -0.003432859666645527, 0.008555794134736061, 0.016279790550470352, 0.002047527115792036, -0.00640953378751874, 0.02620462328195572, -0.031143665313720703},
        {0.011780413798987865, 1.2563978495257708e-17, 0.0017295401776209474, 0.0009446163894608617, 0.0012127863010391593, 0.0024551586247980595, -0.0005008059670217335, -0.0020947072189301252, -0.00042364533874206245, -0.0017209536163136363, 0.006512169726192951, -0.0027592661790549755, -0.0056808083318173885, -0.013574902899563313, -0.0028201849199831486, -0.012981167994439602, -0.007133090402930975, 0.008215637877583504},
        {-0.0007579465163871646, -3.707971429900425e-17, -0.0010596083011478186, -0.0029121257830411196, 0.0021124151535332203, -0.0032134868670254946, 0.0009686407865956426, 0.0012802137061953545, -0.0023217732086777687, 0.0017541836714372039, 0.003667235840111971, 0.00710993492975831, 0.007222767453640699, -0.003254116512835026, 0.0003706464485730976, 0.00893876887857914, 0.0041873157024383545, -0.004236937966197729},
        {-0.010643108747899532, -4.064710108984537e-18, 0.001054279156960547, 0.0028269547037780285, -0.0054355463944375515, 0.0024895882233977318, 0.0014347875257954001, -3.229423236916773e-05, -0.000617140089161694, 0.0012424711603671312, -0.00763934850692749, -0.007754034828394651, -0.003415008308365941, 0.0068586282432079315, 0.001832817797549069, 0.0017387709813192487, -0.008900072425603867, 0.008828741498291492},
        {0.019846659153699875, -9.324138683375338e-18, -0.0027358601801097393, -0.003874200629070401, 0.008751671761274338, -0.0009382012067362666, -0.0022024093195796013, 0.00047489628195762634, 0.0013423485215753317, -0.002450106432661414, 0.006490552797913551, 0.009535062126815319, 0.0018992576515302062, -0.0009509354713372886, 0.00103294407017529, -0.0006332279881462455, 0.010066001676023006, -0.009606617502868176},
        {-0.022172389551997185, -1.4298701971234515e-17, -0.0010010373080149293, 0.0035231581423431635, -0.007913847453892231, -0.0005568433552980423, -0.0017195226391777396, -0.0007170505705289543, 0.00018206740787718445, -0.0004913560696877539, -0.0050702826119959354, -0.0056005180813372135, -0.004932655021548271, -0.006292835809290409, -0.0007840589969418943, 0.00013292721996549517, -0.008077744394540787, 0.007396827917546034},
        {0.017860401421785355, -2.6454533008646308e-17, 7.205776637420058e-05, -0.0026175291277468204, 0.00510853948071599, 0.004062838852405548, 0.0051627629436552525, 0.0006381802959367633, 0.0012098060688003898, 0.00042868725722655654, 0.0015732969623059034, 0.004141220822930336, 0.004186111502349377, 0.014930074103176594, -0.00197509303689003, -0.0003555192961357534, 0.0012973272241652012, -0.0013400039169937372},
        {-0.009835779666900635, -3.469446951953614e-18, -0.002288153162226081, 0.0027397307567298412, -0.0031596345361322165, -0.007268622517585754, -0.002867264673113823, 0.0009867859771475196, -0.007788734510540962, 0.00033994921250268817, -0.0021508692298084497, -0.00964878499507904, 0.0007628630846738815, -0.016778938472270966, 0.0038018308114260435, -0.006955500692129135, 0.0029799286276102066, -0.002480017254129052},
        {-0.001410102122463286, 2.992397996059992e-17, 0.0015097681898623705, -0.0022325487807393074, -0.0005279547767713666, 0.007238344289362431, -0.0018527382053434849, 0.0002824091643560678, 0.010893825441598892, -0.0009458192507736385, 0.0050263842567801476, 0.003250756999477744, -0.0037097439635545015, 0.008259927853941917, -0.0010691171046346426, 0.00783971231430769, 0.003906993195414543, -0.002812489401549101},
        {0.012142650783061981, 1.8837226925353714e-17, 0.000511971942614764, 0.0021733352914452553, 0.0037148715928196907, -0.005214587319642305, 0.001861288445070386, -0.00303265149705112, -0.004134114366024733, 0.002789194229990244, -0.005743847228586674, 0.0067830272018909454, 0.0006033838726580143, -0.0037702671252191067, 0.0006682504317723215, -0.0026155284140259027, -0.010992877185344696, 0.008114449679851532},
        {-0.019871391355991364, -2.862293735361732e-17, 0.0012374441139400005, 0.00029133562929928303, -0.003982085734605789, 0.0026784506626427174, 0.0006672382587566972, 0.0021809085737913847, -0.0002453043998684734, -0.002994024660438299, 0.004472312983125448, -0.00603884132578969, 0.0010757133131846786, 0.004932618234306574, -0.0013630216708406806, 0.0004884325317107141, 0.012566275894641876, -0.008836955763399601},
        {0.02025935985147953, -1.0829255019280901e-17, 0.0017190987709909678, -0.00015646651445422322, 0.003554865252226591, -0.00032158184330910444, -0.001121749635785818, -0.0002908745955210179, -0.0005770688876509666, 0.0017468677833676338, -0.0032046716660261154, 0.0028933496214449406, 0.0014824297977611423, -0.003053904976695776, -0.002004860667511821, 0.0016519814962521195, -0.009988028556108475, 0.006783835124224424},
        {-0.012369000352919102, -1.734723475976807e-17, 9.903451427817345e-05, -0.0007010243134573102, -0.003030734369531274, -0.0011788452975451946, -0.00012542519834823906, 8.403287938563153e-05, 0.00040239180088974535, 0.0007390368264168501, 0.003499277401715517, -0.00031171462615020573, -0.0027174395509064198, 0.0028024499770253897, 0.0012896787375211716, -0.006034225225448608, 0.005329803563654423, -0.0034333423245698214},
        {2.4055689209490083e-05, 6.451789161460983e-18, 0.0005779903731308877, -0.0007631314219906926, 0.0023504409473389387, 0.0010691434144973755, 0.0005193054093979299, 0.00029597285902127624, -0.00038777998997829854, -0.0023785708472132683, -0.004600731190294027, -0.002562114270403981, 0.0038403430953621864, -0.0015202363720163703, 0.008785709738731384, 0.0014357746113091707, -0.018693652004003525, 0.010712051764130592},
        {0.012026995420455933, -3.903127820947816e-18, -0.0020961069967597723, -0.0007512083393521607, -0.0017990991473197937, 0.0005787565605714917, -0.0009480961598455906, -0.0003422809822950512, -0.000923705636523664, 0.003677807515487075, 0.005609449930489063, 0.001438360894098878, -0.0070953103713691235, -0.0051347785629332066, -0.010178911499679089, 0.011856901459395885, 0.04032989591360092, -0.02263534441590309},
        {-0.019167883321642876, -1.734723475976807e-17, -0.0001298566348850727, -0.000775687862187624, 0.0017112324712798, -0.0014640239533036947, 0.0020237083081156015, -0.0015821806155145168, 0.000976219424046576, -0.00434146961197257, 0.0006694755284115672, 0.0009349024039693177, 0.005821978207677603, 0.007233717944473028, 0.00043373435619287193, -0.007941142655909061, -0.03607361018657684, 0.019634123891592026},
        {0.01960960030555725, -3.599551212651875e-17, -0.0013298894045874476, 0.0002802734961733222, -0.0028226927388459444, 0.0005491729243658483, -0.002501443261280656, 0.0024481506552547216, 0.0007559425430372357, 0.00234995293430984, -0.006681634578853846, 0.0010782036697492003, -3.769039540202357e-05, -0.0014194637769833207, 0.0019040952902287245, -0.0008316204184666276, 0.018839387223124504, -0.009681602008640766},
        {-0.013086767867207527, 2.037023413715334e-17, -0.0004928332637064159, 0.0005532926879823208, 0.004072527401149273, -0.00020122691057622433, 0.002752898260951042, -0.0011634909315034747, -0.0005415548803284764, -0.001654088613577187, 0.004561527632176876, -0.0024285141844302416, -0.0006072257529012859, -0.0004231515049468726, -0.00254519353620708, -0.003260422730818391, -0.009505294263362885, 0.004587872885167599},
        {0.002374710515141487, 2.7755575615628914e-17, 0.0007871341076679528, 0.0008123160223476589, -0.0034083810169249773, -0.0012883623130619526, -0.0017647728091105819, -0.00047683363663963974, 0.0010961072985082865, 0.0018636980094015598, -0.0021423117723315954, 0.00042606666102074087, -0.002798989415168762, -0.0029041715897619724, 0.0048694307915866375, 0.003154259640723467, 0.010693068616092205, -0.004619404207915068},
        {0.008424951694905758, -3.469446951953614e-18, -2.6768393581733108e-05, 0.0010774489492177963, 0.002734699286520481, 0.0038128329906612635, -0.0007094236207194626, 0.0017786999233067036, -0.000853569305036217, -0.0019276139792054892, 0.001565153244882822, -0.00033210203400813043, 0.005358052905648947, 0.004734097048640251, -0.003770134411752224, 0.0027489126659929752, -0.017498796805739403, 0.007174498867243528},
        {-0.015983063727617264, -3.469446951953614e-17, 0.0015570874093100429, 0.0003866008191835135, -0.0017409734427928925, -0.00448003550991416, 0.0016052961582317948, -0.002823488786816597, -0.0008336251485161483, 0.0021343387197703123, 0.0005576001713052392, 0.0024866496678441763, -0.004349987953901291, -0.0036625422071665525, 0.001894830958917737, -0.0020014666952192783, 0.01643148809671402, -0.0064445617608726025},
        {0.017270950600504875, -2.3839681089106954e-17, 0.0005907919839955866, 0.00016332745144609362, -0.0008715154253877699, 0.0047251502983272076, 0.00029638546402566135, 0.002159033203497529, -0.0008968469919636846, -0.00033549696672707796, -0.0017561730928719044, -0.003046646248549223, 0.0023200453724712133, 0.0016328528290614486, -0.002764084143564105, -0.0019571443554013968, -0.008875951170921326, 0.003283972619101405},
        {-0.012749102897942066, -9.974659986866641e-18, 0.00019676722877193242, -0.0005577901029027998, 0.0029454827308654785, -0.004417153540998697, -0.001488498062826693, -7.782116153975949e-05, 0.002805558731779456, -0.0015365482540801167, -0.00016905077791307122, 0.00037096827873028815, -0.003148840507492423, -0.0017959901597350836, 0.003514602780342102, 0.0001933712774189189, 0.005381453782320023, -0.001768803340382874},
        {0.004937326069921255, 2.7755575615628914e-17, 0.00016238634998444468, -3.996363375335932e-05, -0.004570793826133013, 0.0028054257854819298, 0.00110883719753474, -0.0005925908335484564, -0.0010287658078595996, 0.0013883229112252593, 0.0018881018040701747, 0.0019398105796426535, 0.0020487371366471052, 0.0028176645282655954, 0.000831244804430753, 0.001354691805317998, -0.011330574750900269, 0.003288696985691786},
        {0.005020720884203911, -6.5052130349130266e-18, -6.12325529800728e-05, -0.0008680653409101069, 0.005976847838610411, -0.0010218678507953882, -0.0007008520769886672, -0.0002287138777319342, -0.00027707809931598604, -0.0006615709862671793, -0.0018154997378587723, -0.0006052578100934625, 0.0005228999070823193, -0.0024147743824869394, -0.0028060628101229668, 0.0011436433997005224, 0.018010839819908142, -0.004956374876201153},
        {-0.01478621456772089, 3.089189956411456e-18, -0.0013912306167185307, -0.0008617419516667724, -0.005383660551160574, -0.0009135791915468872, 4.368960071587935e-05, 0.0009273728355765343, 0.0004963689134456217, 0.00028217872022651136, 0.0008203195757232606, -0.0007613025954924524, -0.0010152143659070134, 0.001840926706790924, 0.0006975210853852332, -0.002110792091116309, -0.017232296988368034, 0.00436697993427515},
        {0.019475428387522697, -1.3010426069826053e-17, -0.0011586048640310764, -0.001003932673484087, 0.003108760342001915, 0.0029418577905744314, -0.00032345170620828867, -0.00045472761848941445, -0.0019036029698327184, 0.0009139752364717424, -0.00048224953934550285, 0.0020798910409212112, 0.0012024245224893093, -0.0015226677060127258, 7.648916653124616e-05, 0.0014592708321288228, 0.015244443900883198, -0.003427211195230484},
        {-0.015398413874208927, -7.359808067327287e-18, -0.001049399608746171, 0.0012474720133468509, -0.0011991542996838689, -0.0035207835026085377, 0.0008334366139024496, -0.0011494314530864358, 0.0027622173074632883, -0.001560400938615203, 0.0009125712094828486, -0.0030514311511069536, -0.0012478645658120513, 0.0014783585211262107, -0.0004106190463062376, -0.001388046657666564, -0.014051481150090694, 0.002823395887389779},
        {0.0059251026250422, 2.862293735361732e-17, 0.001265622559003532, 0.0009036664851009846, -9.165002120425925e-05, 0.0024821448605507612, 0.0001004799923975952, 0.0014910813188180327, -0.0012050390942022204, 0.0005107905017212033, 0.000600694736931473, 0.002462558215484023, 0.0024629049003124237, -0.002290476579219103, 0.0013036718592047691, 0.0001685663592070341, 0.013967652805149555, -0.0023993710055947304},
        {0.0014672304969280958, 1.867616824264474e-17, 0.0004625820438377559, 0.000260400352999568, 0.0008258430170826614, -0.0014637367567047477, -0.0006646972615271807, -6.913090328453109e-05, -0.0005679216701537371, -7.673889194848016e-05, -0.002065087202936411, -0.0007479896303266287, -0.003787448862567544, 0.0012393698561936617, -0.0012168625835329294, 0.0014555971138179302, -0.016488434746861458, 0.0024081538431346416},
        {-0.00384797272272408, 1.431146867680866e-17, 0.0008925404981710017, -5.761178181273863e-05, -0.0006485512712970376, 0.0009152175625786185, 0.0003679382207337767, -0.0006609886768274009, 0.00041968270670622587, 0.0001647257449803874, 0.0002961732679978013, -0.0003868044586852193, 0.0024790926836431026, 0.0007898061303421855, 0.0003278698422946036, -0.001289722858928144, 0.017241278663277626, -0.00214649667032063},
        {0.002548082498833537, -3.2959746043559335e-17, -0.00022307431208901107, -0.0006116009317338467, 0.00018619158072397113, -0.0003849838685709983, -0.0001716038241283968, 0.00031058077001944184, 0.00012724255793727934, -4.490939772949787e-06, 0.0006371099152602255, -0.0001105378323700279, -0.0007383995689451694, -0.0007093574968166649, -0.0001330435334239155, 0.0005596224800683558, -0.01641325280070305, 0.0016183379339054227},
        {-0.0007298215059563518, -3.122502256758253e-17, -0.00021834504150319844, 0.00012545232311822474, -4.382674160297029e-05, 4.113921750104055e-05, 2.9700941013288684e-05, -4.962574621458771e-06, -4.346515197539702e-05, 2.5660789106041193e-05, -8.429210720350966e-05, 0.00016491733549628407, 7.531558367190883e-05, 5.787730697193183e-05, 0.00013422567280940711, -0.00013330999354366213, 0.016322284936904907, -0.001205375068821013},
        {0.0001282918528886512, 1.641289620758125e-17, -3.383051443961449e-05, 2.5205915790138533e-06, 2.331155883439351e-05, 1.1037554031645413e-05, 6.300863333308371e-06, 1.473754991820897e-06, -2.3369282644125633e-05, -1.4261660908232443e-05, 8.357295655514463e-07, 1.7540111002745107e-05, 2.4815197321004234e-05, 1.4283853488450404e-05, 1.1086365702794865e-05, -1.4970521988288965e-05, -0.016202962026000023, 0.0007981364615261555},
        {1.0091117474075872e-05, -3.144186300207963e-18, -1.8778868252411485e-05, 1.4638869743066607e-06, -2.5632084543758538e-06, -5.203209525461716e-07, 3.078782128795865e-06, 1.0417413420782395e-07, -4.724712709958112e-07, 4.401823616717593e-07, 1.587348918974385e-07, 6.201510132086696e-06, 6.042472705303226e-06, 2.573076926637441e-06, 6.935264536878094e-06, -5.993072136334376e-06, 0.01612575352191925, -0.0003960261819884181},
        {-6.326660513877869e-05, 0.0, -1.5040125617815647e-05, 0.0, 6.361331543303095e-06, 0.0, 2.3142474674386904e-06, 0.0, -8.515919944329653e-06, 0.0, 2.0439271963823558e-07, 0.0, 8.860672096488997e-06, 0.0, 5.417402917373693e-06, 0.0, -0.016122575849294662, 0.0}
    };
    for (auto i = 0; i < 9; i++) {
        for (auto j = 0; j < 129; j++) {
            // std::cout << "arr_stft_matrix.getitem("<< i << "," << j << ") = " << arr_stft_matrix.getitem(i,j) << " vs ";
            // std::cout << vec2d_x[j][i * 2 + 0] << " + " << vec2d_x[j][i * 2 + 1] << "j" << std::endl;
            EXPECT_NEAR( arr_stft_matrix.getitem(i,j).real(), vec2d_x[j][i * 2 + 0], 1e-6);
            EXPECT_NEAR( arr_stft_matrix.getitem(i,j).imag(), vec2d_x[j][i * 2 + 1], 1e-6);
        }
    }
}

TEST_F(ROSACXXTest, test_0x05_tone) {
    float duration = 0.2;
    auto y = rosacxx::core::tone(440.f, 22050.f, NULL, &duration);
    EXPECT_NEAR(y.getitem(0),     6.123233995736766e-17, 1e-6);
    EXPECT_NEAR(y.getitem(125),   0.03561143311112808, 1e-6);
    EXPECT_NEAR(y.getitem(333),  -0.7897618899405409, 1e-6);
    EXPECT_NEAR(y.getitem(1333), -0.5854775612828309, 1e-6);
    EXPECT_NEAR(y.getitem(4409), -0.1250505236945571, 1e-6);
}

TEST_F(ROSACXXTest, test_0x06_piptrack) {
#   ifndef _WIN32

    const float freq = 440.f;
    const float sr = 22050.f;
    const float duration = 0.2;
    const int n_fft = 1024;

    auto y = rosacxx::core::tone(freq, sr, NULL, &duration);

    if (y) {
        std::string str_y_gt = Base64Decode(ROSACXXTest_piptrack_y);
        nc::NDArrayF32Ptr y_gt = nc::NDArrayF32Ptr(new nc::NDArrayF32({4410}, (float *)str_y_gt.data()));
        for (auto i = 0; i < y_gt.elemCount(); i++) {
            EXPECT_NEAR(y.getitem(i), y_gt.getitem(i), 1e-6);
        }
    }

    auto Scpx = rosacxx::core::stft(y, n_fft, -1, -1, rosacxx::filters::STFTWindowType::Hanning, false);
    nc::NDArrayF32Ptr S = nc::abs(Scpx);
    if (S) {
        std::string str_S_gt = Base64Decode(ROSACXXTest_piptrack_S);
        nc::NDArrayF32Ptr S_gt = nc::NDArrayF32Ptr(new nc::NDArrayF32({513, 14}, (float *)str_S_gt.data()));
        int big_err_cnt = 0;
        for (auto i = 0; i < S_gt.elemCount(); i++) {
            if (std::abs(S.getitem(i) - S_gt.getitem(i)) > 1e-5 && std::abs(S.getitem(i) - S_gt.getitem(i)) / S_gt.getitem(i) > 1e-3) {
                big_err_cnt += 1;
                // std::cout << "S.getitem(i) = " << S.getitem(i) << ", S_gt.getitem(i) = " << S_gt.getitem(i) << ", Abs Error = " << std::abs(S.getitem(i) - S_gt.getitem(i)) << std::endl;
            }
        }
        EXPECT_LE(float(big_err_cnt) / S_gt.elemCount(), 5e-3);
    }

    auto pm = rosacxx::core::piptrack(y, sr, S, n_fft, -1, 100.f);

    auto pitches = pm[0];
    auto mags = pm[1];

    if (pitches) {
        std::string str_pitches_gt = Base64Decode(ROSACXXTest_piptrack_pitches);
        nc::NDArrayF32Ptr pitches_gt = nc::NDArrayF32Ptr(new nc::NDArrayF32({513, 14}, (float *)str_pitches_gt.data()));
        int big_err_cnt = 0;
        for (auto i = 0; i < pitches_gt.elemCount(); i++) {
            if (std::abs(pitches.getitem(i) - pitches_gt.getitem(i)) > 1e-6 || std::abs(pitches.getitem(i) - pitches_gt.getitem(i)) / pitches_gt.getitem(i) > 1e-3) {
                big_err_cnt += 1;
                // std::cout << "pitches.getitem(i) = " << pitches.getitem(i) << ", pitches_gt.getitem(i) = " << pitches_gt.getitem(i) << ", Abs Error = " << std::abs(pitches.getitem(i) - pitches_gt.getitem(i)) << std::endl;
            }
        }
        EXPECT_LE(float(big_err_cnt) / pitches_gt.elemCount(), 1e-3);
    }

    if (mags) {
        std::string str_mags_gt = Base64Decode(ROSACXXTest_piptrack_mags);
        nc::NDArrayF32Ptr mags_gt = nc::NDArrayF32Ptr(new nc::NDArrayF32({513, 14}, (float *)str_mags_gt.data()));
        int big_err_cnt = 0;
        for (auto i = 0; i < mags_gt.elemCount(); i++) {
            if (std::abs(mags.getitem(i) - mags_gt.getitem(i)) > 1e-6 || std::abs(mags.getitem(i) - mags_gt.getitem(i)) / mags_gt.getitem(i) > 1e-3) {
                big_err_cnt += 1;
                // EXPECT_NEAR(mags.getitem(i),  mags_gt.getitem(i), 1e-5);
                // EXPECT_LE(std::abs(mags.getitem(i) - mags_gt.getitem(i)) / mags_gt.getitem(i), 1e-3);
                // std::cout << "mags.getitem(i) = " << mags.getitem(i) << ", mags_gt.getitem(i) = " << mags_gt.getitem(i) << ", Abs Error = " << std::abs(mags.getitem(i) - mags_gt.getitem(i)) << std::endl;
            }
        }
        EXPECT_LE(float(big_err_cnt) / mags_gt.elemCount(), 5e-3);
    }
#   endif // !_WIN32
}

TEST_F(ROSACXXTest, test_0x07_estimate_tuning) {
    const int                   p_bins_per_octave = 12;
    const float                 p_resolution = 1e-2;
    const std::vector<float>    p_center_note = { 69, 84, 108 };
    const std::vector<float>    p_tuning = { -0.5, -0.3, -0.1,  0.1,  0.3 };
    const std::vector<float>    p_sr = { 11025, 22050 };
    for (auto center_note : p_center_note) {
        for (auto tuning : p_tuning) {
            for (auto sr : p_sr) {
                float duration = 0.5;
                auto target_hz = rosacxx::core::midi_to_hz<float, float>(center_note + tuning);
                auto y = rosacxx::core::tone(target_hz, sr, NULL, &duration);
                nc::NDArrayF32Ptr S = nullptr;
                float fmin = rosacxx::core::note_to_hz<float>("C4 (middle C)"); // 261.6255653005986
                float fmax = rosacxx::core::note_to_hz<float>("G#9/Ab9"); // 13289.750322558246
                float tuning_est = rosacxx::core::estimate_tuning(y, sr, S, 2048, p_resolution, p_bins_per_octave, -1, fmin, fmax);
                int decimals = -log10(p_resolution);
                float deviation = std::round((tuning - tuning_est) * pow(10, decimals)) / pow(10, decimals);
                float dev = std::min(
                             deviation - int( deviation),
                            -deviation - int(-deviation)
                            );
                EXPECT_LE(dev, 3 * p_resolution);
            }
        }
    }
}

TEST_F(ROSACXXTest, test_0x08_resample_kaiser_best) {
    nc::NDArrayF32Ptr src = nc::NDArrayF32Ptr(new nc::NDArrayF32({ROSACXXTest_resample_kaiser_best_src_len}));
    for (auto i = 0; i < ROSACXXTest_resample_kaiser_best_src_len; i++) {
        *src.at(i) = ROSACXXTest_resample_kaiser_best_src_dat[i];
    }

    nc::NDArrayF32Ptr dst = rosacxx::core::resample(
                src,
                ROSACXXTest_resample_kaiser_best_src_sr,
                ROSACXXTest_resample_kaiser_best_dst_sr,
                "kaiser_best",
                true,
                true
                );

    EXPECT_NE(dst, nullptr);
    EXPECT_EQ(dst.elemCount(), ROSACXXTest_resample_kaiser_best_dst_len);
    for (auto i = 0; i < ROSACXXTest_resample_kaiser_best_dst_len; i++) {
        EXPECT_NEAR(ROSACXXTest_resample_kaiser_best_dst_dat[i], dst.getitem(i), 1e-6);
    }
}

TEST_F(ROSACXXTest, test_0x09_resample_kaiser_fast) {
    nc::NDArrayF32Ptr src = nc::NDArrayF32Ptr(new nc::NDArrayF32({ROSACXXTest_resample_kaiser_fast_src_len}));
    for (auto i = 0; i < ROSACXXTest_resample_kaiser_fast_src_len; i++) {
        *src.at(i) = ROSACXXTest_resample_kaiser_fast_src_dat[i];
    }

    nc::NDArrayF32Ptr dst = rosacxx::core::resample(
                src,
                ROSACXXTest_resample_kaiser_fast_src_sr,
                ROSACXXTest_resample_kaiser_fast_dst_sr,
                "kaiser_fast",
                true,
                true
                );

    EXPECT_NE(dst, nullptr);
    EXPECT_EQ(dst.elemCount(), ROSACXXTest_resample_kaiser_fast_dst_len);
    for (auto i = 0; i < ROSACXXTest_resample_kaiser_fast_dst_len; i++) {
        EXPECT_NEAR(ROSACXXTest_resample_kaiser_fast_dst_dat[i], dst.getitem(i), 1e-6);
    }
}

TEST_F(ROSACXXTest, test_0x0a_vqt) { // CQT is the special case of VQT with gamma=0
    const float sr = ROSACXXTest_vqt_sr;
    const float fmin = INFINITY;
    const int n_bins = 12;
    const float gamma = INFINITY;
    const int bins_per_octave = 12;
    const float tuning = 0;
    const float filter_scale = 1;
    const float norm = 1;
    const float sparsity = 0.01;
    const int hop_length = 512;

    nc::NDArrayF32Ptr y = nc::NDArrayF32Ptr(new nc::NDArrayF32({ROSACXXTest_vqt_y_len}));
    for (auto i = 0; i < ROSACXXTest_vqt_y_len; i++) {
        *y.at(i) = float(ROSACXXTest_vqt_y_dat[i]);
    }

    std::vector<int> C_shape(ROSACXXTest_vqt_C_dims);
    for (auto i = 0; i < ROSACXXTest_vqt_C_dims; i++) {
        C_shape[i] = ROSACXXTest_vqt_C_shape[i];
    }
    nc::NDArrayPtr<std::complex<float>> C = nc::NDArrayPtr<std::complex<float>>(new nc::NDArray<std::complex<float>>(C_shape));
    for (auto i = 0; i < C.elemCount(); i++) {
        C.at(i)->real(float(ROSACXXTest_vqt_C_real_dat[i]));
        C.at(i)->imag(float(ROSACXXTest_vqt_C_imag_dat[i]));
    }

    auto C_pred = rosacxx::core::vqt(y, sr, hop_length, fmin, n_bins, gamma, bins_per_octave, tuning, filter_scale, norm, sparsity);

    EXPECT_EQ(C.shape(), C_pred.shape());//, true);
    for (auto i = 0; i < C.elemCount(); i++) {
        EXPECT_NEAR(C.getitem(i).real(), C_pred.getitem(i).real(), 1e-5);
        EXPECT_NEAR(C.getitem(i).imag(), C_pred.getitem(i).imag(), 1e-5);
    }
}

TEST_F(ROSACXXTest, test_0x0b_cqt) { // CQT is the special case of cqt with gamma=0
    const float sr = ROSACXXTest_cqt_sr;
    const float fmin = INFINITY;
    const int n_bins = 12;
    // const float gamma = 0.0;
    const int bins_per_octave = 12;
    const float tuning = 0;
    const float filter_scale = 1;
    const float norm = 1;
    const float sparsity = 0.01;
    const int hop_length = 512;

    nc::NDArrayF32Ptr y = nc::NDArrayF32Ptr(new nc::NDArrayF32({ROSACXXTest_cqt_y_len}));
    for (auto i = 0; i < ROSACXXTest_cqt_y_len; i++) {
        *y.at(i) = float(ROSACXXTest_cqt_y_dat[i]);
    }

    std::vector<int> C_shape(ROSACXXTest_cqt_C_dims);
    for (auto i = 0; i < ROSACXXTest_cqt_C_dims; i++) {
        C_shape[i] = ROSACXXTest_cqt_C_shape[i];
    }
    nc::NDArrayPtr<std::complex<float>> C = nc::NDArrayPtr<std::complex<float>>(new nc::NDArray<std::complex<float>>(C_shape));
    for (auto i = 0; i < C.elemCount(); i++) {
        C.at(i)->real(float(ROSACXXTest_cqt_C_real_dat[i]));
        C.at(i)->imag(float(ROSACXXTest_cqt_C_imag_dat[i]));
    }

    auto C_pred = rosacxx::core::cqt(y, sr, hop_length, fmin, n_bins, bins_per_octave, tuning, filter_scale, norm, sparsity);

    EXPECT_EQ(C.shape(), C_pred.shape());//, true);
    for (auto i = 0; i < C.elemCount(); i++) {
        EXPECT_NEAR(C.getitem(i).real(), C_pred.getitem(i).real(), 1e-4);
        EXPECT_NEAR(C.getitem(i).imag(), C_pred.getitem(i).imag(), 1e-4);
    }
}

TEST_F(ROSACXXTest, test_0x0c_chroma_cqt) {
    using namespace tests::ROSACXXTest::chroma_cqt;
    nc::NDArrayF32Ptr y = nc::NDArrayF32Ptr(new nc::NDArrayF32({y_len}));
    for (auto i = 0; i < y_len; i++) {
        *y.at(i) = float(y_dat[i]);
    }

    std::vector<int> chromaShape(chroma_dims);
    for (auto i = 0; i < chroma_dims; i++) {
        chromaShape[i] = chroma_shape[i];
    }

    auto chroma_pred = rosacxx::feature::chroma_cqt(y, y_sr, nullptr, hop_lenght);

    EXPECT_EQ(chromaShape, chroma_pred.shape());//, true);
    for (auto i = 0; i < chroma_pred.elemCount(); i++) {
        EXPECT_NEAR(chroma_dat[i], chroma_pred.getitem(i), 1e-4);
    }
}

TEST_F(ROSACXXTest, test_0x0c_istft) {
    using namespace tests::ROSACXXTest::istft;

    nc::NDArrayF32Ptr DatY = nc::NDArrayF32Ptr(new nc::NDArrayF32({DatY_shapes[0]}));
    for (auto i = 0; i < DatY.elemCount(); i++) {
        *DatY.at(i) = float(DatY_dat[i]);
    }

    nc::NDArrayPtr<std::complex<float>> DatS = nc::NDArrayPtr<std::complex<float>>(new nc::NDArray<std::complex<float>>({DatS_Real_shapes[0], DatS_Real_shapes[1]}));
    for (auto i = 0; i < DatS.elemCount(); i++) {
        DatS.at(i)->real(float(DatS_Real_dat[i]));
        DatS.at(i)->imag(float(DatS_Imag_dat[i]));
    }

    auto DatY_pred = rosacxx::core::istft<float>(DatS, hop_length, -1, rosacxx::filters::STFTWindowType::Hanning, false, -1);

    EXPECT_EQ(DatY_pred.shape(), DatY.shape());
    int big_err_cnt = 0;
    for (auto i = 0; i < DatY.elemCount(); i++) {
        if (std::abs(DatY_pred.getitem(i) - DatY.getitem(i)) > 1e-4) {
            std::cout << "[----------] DatY_pred.getitem(i) = " << DatY_pred.getitem(i) << " and DatY.getitem(i) = " << DatY.getitem(i) << " and abs err = " << std::abs(DatY_pred.getitem(i) - DatY.getitem(i)) << std::endl;
            big_err_cnt+=1;
        }
    }
    EXPECT_LE(float(big_err_cnt)/DatY.elemCount(), 1e-3);
}

#endif
